如何通过JS从数组中删除特定的数字?

问题描述:

我有一个数组如下。如何通过JS从数组中删除特定的数字?

var array_numbers = [0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9]; 

如何从数组中删除零的所有出现并获得数组中的非零数?

var result_numbers = [1,2,3,4,5,6,7,8,9]; 
+3

你试过了什么?你看过Array的[filter()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)函数吗? –

+1

[用javascript从数组中删除零值]的可能重复(https://*.com/questions/5817756/delete-zero-values-from-array-with-javascript) – Dalorzo

+0

https://*.com/q/25361799/1959948 – Dalorzo

可能比较容易刚刚经历Boolean过滤每一个项目:

const arr = [0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9] 
 

 
console.log(arr.filter(Boolean))

+0

错误的答案!你的'arr'仍然是'[0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9]'。除了它也会过滤所有其他的虚假值。 –

+0

@BekimBacaj它只是一个“错误的答案”,如果你正在定义一个正确的答案,必然会改变原始数组。 OP没有问“我如何从数组中删除元素?”,我(和其他人)确定他们问如何从A => B(而Array.filter是完美的方式)。如果OP将'arr.filter'的结果赋值给一个变量,他们将得到他们想要的数组。 –

+0

是的,他做了“从数组中删除特定数字”并不意味着创建一个新的数组。而“一个特定的数字”当然并不意味着“明确地去除零”,当然也不意味着任何虚假价值。 –

您可以使用Javascript过滤器功能。

首先,定义一个函数,如果您希望保留该值,或者如果您希望删除它,则返回true。要检查的值将作为参数传递给函数。

function removeZeros(value) { 
    return value !== 0; 
} 

然后,您可以在阵列上的filter方法中使用该函数。

var result_numbers= array_numbers.filter(removeZeros); 
+0

value!= 0也将匹配false和null ...使用!== – k2snowman69

+0

您还可以使用箭头函数,它将它全部放在一行中。 – Isac

+0

其他说明,似乎这可能不适用于IE 11,因为它没有过滤器 – k2snowman69

array_numbers = [0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9]; 
 

 
for(var x in array_numbers)array_numbers[x] === 0 ? array_numbers.splice(x,1) : 0; 
 

 
/* See the result */ 
 
console.log(JSON.stringify(array_numbers));

为补充韦恩的答案您还可以使用ES6 Arrow Function来进一步简化代码。

这将是这样的:

var array_numbers = [0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9]; 
 

 
console.log(array_numbers.filter(x => x !== 0));

而作为罗布中号表示0评估为假,这样你就可以多用刚修剪下来了一点:

array_numbers.filter(x => x); 

示例:

var array_numbers = [0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9]; 
 

 
console.log(array_numbers.filter(x => x));

注意,在后一种情况下,计算结果为假,如false''等数值也将被删除。

+0

或者'array_numbers.filter(x => x)'因为'0'是falsey –

+0

另外一个错误的答案,你不会从给定的数组中删除任何东西。 –

+0

@BekimBacaj他的示例隐含两个不同的数组,因为存储它们的变量具有不同的名称。所以目前还不清楚他是否真的需要改变原始数组或者是否有副本就足够了。 – Isac