函數如下:
複製代碼 代碼如下:foreach = function (obj, insp){
if(obj== null && obj.constructor != Array){
return [];
}
//obj是要處理的數組,obj==null 表示對象尚未存在;obj.constructor != Array 表示對象obj的屬性的建構函式不是數組;
//constructor屬性始終指向建立當前對象的建構函式。兩個條件均滿足,則返回空數組[];
//下面對constructor屬性作進一步瞭解。
var obj= [1, 2, 3, 4]; // 等價於 var obj= new Array(1, 2, 3, 4);
console.log(obj.constructor === Array); // 返回true 表明obj的建構函式為Array;
var foo= function() { }; // 等價於 var foo = new Function();
console.log(foo.constructor === Function); // 返回true 表明foo的建構函式為Function;
var obj = new Foo(); //由建構函式執行個體化一個obj對象
console.log(obj.constructor === Foo); // 返回true 表明obj的建構函式為Foo;
-----------------------------------------------------------------------------------------------------------
var i=0, len = obj.length, r = [];
while(i<len){
var x = insp(obj[i], i);
if (x !== null) {
r[r.length] = x;
}
i++;
}
return r;
};
//對數組對象obj進行遍曆,參數insp代表一個方法或函數,用於對obj中的每個元素進行操作。給參數insp傳遞了兩個參數,obj[i]代表數組中的每一個元素值;並將函數參數insp賦給x,最終將x值賦給數組r。
-----------------------------------------------------------------------------------------------------------
比如我們要遍曆數組中的每一個元素,引用foreach函數
var testArray = [1,2,3,4,5,1,2,'w'];
foreach(testArray, function(i){
alert(i)
});
-----------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------
我們用另一個函數來刪除指定數組中指定的元素; 複製代碼 代碼如下:ArrayWithout = function(){
if (arguments.length < 2) {
// Arguments 是特殊的對象,代表函數的參數.
return arguments.length == 1 ? arguments[0] : null;
}
var results = [];
var aa = arguments[0];
//將第一參數賦給數組aa;
if (aa === null || aa.constructor != Array) {
return null;
//如果aa不存在或者不是數組,那麼返回null;
}
if(arguments[1].constructor == Array){
// 如果第二個參數是數組,則將參數數組中對應的每個元素都刪除;
var args = [];
args[0] = aa;
//aa = arguments[0] 將aa賦給數組args,作為其第一個元素值;
foreach(arguments[1], function(v, i){
//引用了函數foreach,來對數組arguments[1]中每個元素進行操作,
args[i+1] = v;
// v代表數組arguments[1]中每個元素值,將它們一一賦值給args[1],args[2]...,而args[0]=arguments[0];
});
}
else{
args = arguments;
//如果第二個參數不是數組,則直接將參數數組賦給args;
}
for(var i = 0;i < aa.length; i ++){
var isWithout = true;
for(var j = 1; j < args.length ; j ++){
if(aa[i] == args[j]){
isWithout = false;
break;
// 切記j是從1開始的,因為args的第一元素args[0]是arguments[0],正是我們要處理的的原數組,等同於數組aa;
讓要刪除的各個元素與原數組aa中的某一元素進行逐次比較,如果相同,break 跳出迴圈; isWithout返回false,所以也不再執行下面的 results.push(aa[i]);
}
}
if (isWithout) {
results.push(aa[i]);
//所謂刪除原理,就是將原數組各元素與要刪除的元素進行比較,保留與要刪除的元素不相同的元素並賦給一個新的數組results;
}
}
return results;
//返回已經刪除了指定元素的數組;
};
// 引用ArrayWithout的例子
var testArray = [1,2,3,4,5,1,2,'w'];
var result = ArrayWithout(testArray, 1, 3);
//var result = ArrayWithout(testArray, [1, 4]);
alert(result) //[2,4,5,2]
原始碼如下: 複製代碼 代碼如下:foreach = function (obj, insp){
if(obj == null && obj.constructor != Array){
return [];
}
var i=0, len = obj.length, r = [];
while(i<len){
var x = insp(obj[i], i);
if (x !== null) {
r[r.length] = x;
}
i++;
}
return r;
};
ArrayWithout = function(){
if (arguments.length < 2) {
return arguments.length == 1 ? arguments[0] : null;
}
var results = [];
var aa = arguments[0];
if (aa === null || aa.constructor != Array) {
return null;
}
if(arguments[1].constructor == Array){
var args = [];
args[0] = aa;
foreach(arguments[1], function(v, i){
args[i+1] = v;
});
}
else{
args = arguments;
}
for(var i = 0;i < aa.length; i ++){
var isWithout = true;
for(var j = 1; j < args.length ; j ++){
if(aa[i] == args[j]){
isWithout = false;
break;
}
}
if (isWithout) {
results.push(aa[i]);
}
}
return results;
};
var testArray = [1,2,3,4,5,1,2];
foreach(testArray, function(i){
alert(i)
})
var result = ArrayWithout(testArray, 1, 3);
//var result = ArrayWithout(testArray, [1, 3]);
alert(result) //[2,4,5,2]