如何从JavaScript中的数组中删除null,undefined,NaN,0s,false和空字符串?(how to remove null, undefined, NaN, 0s, falses and empty string from an array in JavaScript?)
我使用.splice()编写了一个脚本来删除任何null,undefined,0,false或空字符串值,但代码只删除了NaN和0。
这是我试过的:
function remove(arr){ // input [NaN, 0, 15, false, -22, '',undefined, 47, null] var bin = []; for (var i =0; i<arr.length; i++){ if (arr[i] == (NaN || 0 || false || "" || undefined || null)){ arr.splice(arr[i],1); } } console.log(arr); // Expected output [15, -22, 47] }I wrote a script to remove any null, undefined, 0, false or empty string value using .splice(), but the code has only removed NaN and 0s.
Here is what I tried:
function remove(arr){ // input [NaN, 0, 15, false, -22, '',undefined, 47, null] var bin = []; for (var i =0; i<arr.length; i++){ if (arr[i] == (NaN || 0 || false || "" || undefined || null)){ arr.splice(arr[i],1); } } console.log(arr); // Expected output [15, -22, 47] }最满意答案
代码中的问题:
迭代从最后一个元素到第一个元素的数组 Array#splice需要第一个参数作为索引,而不是项目本身 要检查元素是否为NaN ,请使用isNaN() 。 要与多个值进行比较,请将各个元素与每个项目进行比较工作代码:
function remove(arr) { for (var i = arr.length - 1; i >= 0; i--) { if (isNaN(arr[i]) || arr[i] === 0 || arr[i] === false || arr[i] === "" || arr[i] === undefined || arr[i] === null) { // Which is same as // if (!arr[i]) { arr.splice(i, 1); } } console.log(arr); // Expected output [15, -22, 47] } remove([NaN, 0, 15, false, -22, '', undefined, 47, null]);
使用Array#filter
arr = arr.filter(e => e);var input = [NaN, 0, 15, false, -22, '',undefined, 47, null]; var filteredArr = input.filter(e => e); document.body.innerHTML = '<pre>' + JSON.stringify(filteredArr, 0, 4) + '</pre>';或者如@dandavis在评论中所说的
arr = arr.filter(Boolean);var input = [NaN, 0, 15, false, -22, '',undefined, 47, null]; var filteredArr = input.filter(Boolean); document.body.innerHTML = '<pre>' + JSON.stringify(filteredArr, 0, 4) + '</pre>';Problem in code:
Iterate over array from last element to first element Array#splice expects first argument as index, not the item itself To check if an element is NaN, use isNaN(). To compare with multiple values, compare the elements individually with each itemWorking code:
function remove(arr) { for (var i = arr.length - 1; i >= 0; i--) { if (isNaN(arr[i]) || arr[i] === 0 || arr[i] === false || arr[i] === "" || arr[i] === undefined || arr[i] === null) { // Which is same as // if (!arr[i]) { arr.splice(i, 1); } } console.log(arr); // Expected output [15, -22, 47] } remove([NaN, 0, 15, false, -22, '', undefined, 47, null]);
Use Array#filter
arr = arr.filter(e => e);var input = [NaN, 0, 15, false, -22, '',undefined, 47, null]; var filteredArr = input.filter(e => e); document.body.innerHTML = '<pre>' + JSON.stringify(filteredArr, 0, 4) + '</pre>';Or as said by @dandavis in comment
arr = arr.filter(Boolean);var input = [NaN, 0, 15, false, -22, '',undefined, 47, null]; var filteredArr = input.filter(Boolean); document.body.innerHTML = '<pre>' + JSON.stringify(filteredArr, 0, 4) + '</pre>';
更多推荐
发布评论