我有一个名为"ids"的数组,其中包含一些值,如['0','567','956','0','34']。现在我需要从该数组中删除“0”值。 ids.remove("0")无法起作用。
我需要使用以下代码将数组中的所有“0”值删除:
ids = [value for value in ids if value != '0']
我有一个名为"ids"的数组,其中包含一些值,如['0','567','956','0','34']。现在我需要从该数组中删除“0”值。 ids.remove("0")无法起作用。
我需要使用以下代码将数组中的所有“0”值删除:
ids = [value for value in ids if value != '0']
这是一个函数,可以删除数组中特定值的元素,而不会在两个连续元素具有相同值时失败:
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),你可以使用数组对象的filter()
方法,但是请注意,这会返回一个新的数组:
a = a.filter(function(val) {
return val !== 0;
});
return val;
。 - Brian Leishmanreturn val
会过滤掉任何 false 值,比如 false
或者空字符串,而不仅仅是 0
。 - Tim Down!==
,在这里使用它是有意义的。 - Brian Leishman使用 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
arrayElement
中传递0
。 - Harry Joyif
语句中加上 i--
才能解决这个问题。 - blex以下是一种实现方式:
const array = ['0', '567', '956', '0', '34'];
const filtered = array.filter(Number);
console.log(filtered);
对于ES6最佳实践标准:
let a = ['0','567','956','0','34'];
a = a.filter(val => val !== "0");
请注意,您数组中的"id"是字符串,如果要检查其类型,请编写"!="。
对于非常大的数组,构建一个新数组仍然比splice或filter快得多。
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 );
}
}
如果你使用splice,请逆向迭代!
ids.filter(function(x) {return Number(x);});
for(var i=0; i<ids.length;i++ )
{
if(ids[i]=='0')
ids.splice(i,1);
}
var newList = ['0', '567', '956', '0', '34'].filter(cV => cV != "0")
你总是可以这样做,
listWithZeros = ['0', '567', '956', '0', '34']
newList = listWithZeros.filter(cv => cv != "0")
newList
包含您所需的列表。
说明
该方法通过测试条件函数过滤掉项目并返回一个新的数组。Array.prototype.filter()
Array.prototype.filter((currentValue, index, array) => { ... })
最简单的方法是使用splice
!但是有一个问题,每次删除一个元素时,数组的大小将不断减少。因此,循环会跳过1个索引,导致数组大小减小。
这个程序只会移除每个第一个零。
// 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);
}
split
。请在你添加新答案时加入一些详细信息说明原因。 - MD Zand