我有以下实现。
Array.prototype.abc = function(condition, t){
var arr = [];
for( var i = 0; i < this.length; i++){
arr.push(condition(this[i],t));
}
return arr;
};
var a = [1,2,3,4];
var t = 2;
alert(a.abc( function(item,diviser){
if(item % diviser === 0) { return item; }
},t));
结果应该是[2,4]
。相反,我得到了[,2,,4]
。
我尝试了以下条件,但始终会返回上述结果。
if(condition(this[i],t) !== false){ arr.push(condition(this[i],t)); }
我在做的时候在做这个
if(item % diviser === 0) { return item; } else { return false; }
该false
条件不适用于'false'
或true
或'true'
就此而言我在其他部分返回的任何值。在实际的实现中,我没有这个else
部分。我知道我们可以使用splice
或其他方法删除空白部分。但是,即使我没有返回任何内容,我也不明白,为什么在创建时会出现空白。甚至在使用if条件之前,arr.push
它也不起作用。到底发生了什么,以及如何删除数组中的空白?
您必须检查返回的值是否undefined
来自callBack
,
for( var i = 0; i < this.length; i++){
var x = condition(this[i],t);
if(typeof x !== "undefined") arr.push(x);
}
您已进行2次不同的尝试来解决此问题,但由于失败,
!== false
,您的callBack将返回数字或未定义。因此,严格相等将始终失败,并且由于操作数的类型不同,因此始终将其评估为false。
if(item % diviser === 0) { return item; } else { return false; }
当条件失败时,它将返回false,因此false
将被推入数组。而且它不会跳过那个推动部分。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句