使用JavaScript从数组中删除零值

xurqigkl  于 2023-02-07  发布在  Java
关注(0)|答案(9)|浏览(271)

我有一个名为“ids”的数组,其中包含了一些值,如['0','567','956','0','34']。现在我需要从这个数组中删除“0”个值。**ids.remove(“0”);**不工作。

zvokhttg

zvokhttg1#

下面是一个函数,它将删除数组中具有特定值的元素,当两个连续的元素具有相同的值时,该函数不会失败:

function removeElementsWithValue(arr, val) {
    var i = arr.length;
    while (i--) {
        if (arr[i] === val) {
            arr.splice(i, 1);
        }
    }
    return arr;
}

var a = [1, 0, 0, 1];
removeElementsWithValue(a, 0);
console.log(a); // [1, 1]

在大多数浏览器中(除了IE〈= 8),你可以使用Array对象的filter()方法,但是要注意这会返回一个新的数组:

a = a.filter(function(val) {
    return val !== 0;
});
bweufnob

bweufnob2#

在javascript中使用splice方法。尝试以下函数:

function removeElement(arrayName,arrayElement)
 {
    for(var i=0; i<arrayName.length;i++ )
     { 
        if(arrayName[i]==arrayElement)
            arrayName.splice(i,1); 
      } 
  }

参数为:

arrayName:-      Name of the array.
arrayElement:-   Element you want to remove from array
drnojrws

drnojrws3#

这里有一个方法可以做到这一点:

['0','567','956','0','34'].filter(Number)
tgabmvqs

tgabmvqs4#

对于非平凡大小的数组,构建新数组仍然比拼接或过滤要快得多。

var new_arr = [],
tmp;

for(var i=0, l=old_arr.length; i<l; i++)
{
  tmp = old_arr[i];

  if( tmp !== '0' )
  {
    new_arr.push( tmp );
  }
}

如果要拼接,请向后迭代!

oipij1gg

oipij1gg5#

对于ES6最佳实践标准:

let a = ['0','567','956','0','34'];

a = a.filter(val => val !== "0");

(note你的“id”是数组中的字符串,所以不管类型如何,你都应该写“!=”)

von4xj4u

von4xj4u6#

下面的代码可以解决您的问题

for(var i=0; i<ids.length;i++ )
 { 
    if(ids[i]=='0')
        ids.splice(i,1); 
  }
72qzrwbm

72qzrwbm7#

ids.filter(function(x) {return Number(x);});
jaql4c8m

jaql4c8m8#

我相信,最短的方法是

var newList = ['0', '567', '956', '0', '34'].filter(cV => cV != "0")

你总是可以的,

listWithZeros = ['0', '567', '956', '0', '34']
newList = listWithZeros.filter(cv => cv != "0")

newList包含您所需的列表。

    • 说明**

数组.原型.筛选器()
此方法返回一个新数组,该数组是通过在测试条件函数后筛选出项而创建的
它接受一个函数,可能有3个参数。
语法:

Array.prototype.filter((currentValue, index, array) => { ... })

参数说明了一切。
Read more here.

nimxete2

nimxete29#

最简单的方法是使用splice!!.但是有一个问题,每当你删除一个元素,你的数组大小就会不断减少。所以循环会跳过数组大小减少的一个索引。
此程序只删除每个第一个零。

// Wrong approach
let num = [1, 0, 0,  2, 0, 0, 3,];

for(let i=0; i<num.length; i++){
    if(num[i]==0)
        num.splice(i, 1);
}
console.log(num)

输出将是

[1,0,2,0,3]

因此,要删除所有的零,如果您发现了非零数字,则应增加索引。

let i = 0;
while(i<num.length){
    if(num[i]==0){
        num.splice(i,1);
    }
    else{
        i++;
    }
}

但是有一个更好的方法。因为改变数组的大小只影响数组的右边。你可以反向遍历并拼接。

for(let i=num.length-1; i>=0; i--){
    if(num[i]===0)
        num.splice(i,1);
}

相关问题