从 Javascript 中的数组中删除某些元素

Deleting certain elements from an array in Javascript

我正在尝试编写一个程序来删除数组中的所有零、空字符串、空值或未定义的值。但是,当我 运行 这个数组时:[1,null,2,3,0,-1,1.1],通过它下面的代码 returns 数组中仍然有 null 和 0 值.有帮助吗?

function cleanArray(arr) {
    var i = 0;
    for (i; i < arr.length; i++) {
        if (arr[i] === 0 || arr[i] === '' || arr[i] === null || arr[i] === undefined) {
            arr.splice(i, 1);
            i--;
        }
        return arr;
    }
}

您需要将 return arr; 移到 for 循环之外。

function cleanArray(arr) {
    var i = 0;
    for (i; i < arr.length; i++) {
        if (arr[i] === 0 || arr[i] === '' || arr[i] === null || arr[i] === undefined) {
            arr.splice(i, 1);
            i--;
        }
    }
    return arr;
}

使用 .filter() 和虚假值删除不需要的项目

function cleanArray(arr) {
    return arr.filter(function (item) {
        return !!item;
        //or return arr[i] !== 0 && arr[i] !== '' && arr[i] !== null && arr[i] !== undefined
    })
}

因为 return arr;,您已将其置于 for 循环中。一旦代码 运行 到达第一个元素,它就会到达 return 并将函数与数组保持一致,就像在循环的第一个 运行 之后一样。

只需将 return 语句移到 for 循环之外,如下所示:

function cleanArray(arr) {
    var i = 0;
    for (i; i < arr.length; i++) {
        if (arr[i] === 0 || arr[i] === '' || arr[i] === null || arr[i] === undefined) {
            arr.splice(i, 1);
            i--;
        }
    }
    return arr;
}

非常简单,

arr = arr.filter(function(item) {
    return !!item;
});

但这会让 true 和其他非数值通过

arr = arr.filter(function(item) {
    return !!item && !isNaN(item);
});

可能效果更好(我自己还没有测试过 - 留给你一些尝试)

您可以使用数组过滤器

var arr = [1,null,2,3,0,-1,1.1];

var filteredArr = arr.filter(function(i){
    // if in javascript checks for truthy values
    if(i) {
     return i;   
    }
});


console.log(filteredArr); // [1, 2, 3, -1, 1.1]

演示 here

  function cleanArray(arr) {
    var i = 0, newArr = [];

    for (i; i < arr.length; i++) {
        if (arr[i]) {
            newArr.push(arr[i]);          
        }

    }
    return newArr;
}

这肯定有效。希望我有所帮助。 这里的fiddle:https://jsfiddle.net/rok_ed/coakcd3L/