gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-27 23:05:36 26 4
gpt4 key购买 nike

我有以下实现。

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返回的值是否为未定义

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

您已进行 2 次不同的尝试来解决此问题,但都失败了,因为,

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

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

关于javascript - 如何删除javascript数组中的空白元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36620347/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com