如何删除javascript数组中的空白元素

How to remove the blank element in javascript array?

本文关键字:数组 空白 元素 javascript 何删除 删除      更新时间:2023-09-26

我有以下实现。

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或其他东西来删除空白部分。但我不明白,即使我什么都不回,为什么在被创造时是空白的。即使在arr.push之前使用if条件,它也不起作用。到底发生了什么?如何删除数组中的空白?

您必须从callBack、中检查返回值是否为undefined

for( var i = 0; i < this.length; i++){
  var x = condition(this[i],t);
  if(typeof x !== "undefined") arr.push(x);         
}

你已经做了两次不同的尝试来解决这个问题,但都会失败,因为,

  1. !== false,您的回调将返回一个数字或未定义。因此,由于操作数的类型不同,严格相等将始终失败,并且总是被计算为false。

  2. if(item % diviser === 0) { return item; } else { return false; }当条件失败时,这将返回false,因此false将被推入数组。它不会跳过推动部分。

将cmcondition移到push之外并将其放在前面。条件只应返回true或false。

condition(this[i],t) && arr.push(this[i]);         

这是因为无论condition返回什么,您都在进行推送。

更换此

arr.push(condition(this[i],t));

带有

var val = condition(this[i],t)
val = val !== false && arr.push(val);

由于condition方法显式返回false,因此您可以简单地检查val !== false

演示

Array.prototype.abc = function(condition, t){
    var arr = [];
    for( var i = 0; i < this.length; i++){
       var val = condition(this[i],t); console.log(val);
       val !== false && arr.push(val);
    }
    return arr;
};
var a = [1,2,3,4];
var t = 2;
document.body.innerHTML += a.abc( function(item,diviser){
    if(item % diviser === 0) { return item; } else { return false; }
},t);