2017-09-05 51 views
-2

我有一個數組如下。如何通過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://stackoverflow.com/questions/5817756/delete-zero-values-from-array-with-javascript) – Dalorzo

+0

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

回答

1

可能比較容易剛剛經歷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

是的,他做了「從數組中刪除特定數字」並不意味着創建一個新的數組。而「一個特定的數字」當然並不意味着「明確地去除零」,當然也不意味着任何虛假價值。 –

2

您可以使用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

0

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));

0

爲補充韋恩的答案您還可以使用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