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

时间:2015-07-06 05:15:00

标签: javascript arrays for-loop logical-operators

我正在尝试编写一个程序,该程序将删除数组中的任何零,空字符串,null或未定义的值。但是当我运行这个数组:[1,null,2,3,0,-1,1.1]时,通过下面的代码返回数组,其中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;
    }
}

6 个答案:

答案 0 :(得分:3)

因为return arr;,你已放入for循环中。一旦代码运行通过第一个元素,它就会命中返回并使用数组离开函数,就像第一次运行循环一样。

只需将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;
}

答案 1 :(得分:2)

您需要将#include <iostream> #include <algorithm> #include <limits> using namespace std; int main(int argc, char ** argv) { int N = 100; int * drop = new int[N + 1]; drop[0] = 0; drop[1] = drop[2] = 1; for (int i = 3; i <= N; ++i) { drop[i] = numeric_limits<int>::max(); // <limits> for(int start = 1; start <= i; ++start) drop[i] = min(drop[i], max(start, drop[i - start] + 1)); // <algorithm> } cout << drop[3] << endl; return 0; } 移出for循环。

return arr;

答案 2 :(得分:2)

使用.filter()和falsy值删除不需要的内容

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

答案 3 :(得分:1)

非常简单,

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

但是这样可以通过

获取true和其他非数字值
arr = arr.filter(function(item) {
    return !!item && !isNaN(item);
});

可能会更好地工作(我自己也没有对它进行测试 - 给你一些尝试的东西)

答案 4 :(得分:0)

您可以使用数组过滤器

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

答案 5 :(得分:0)

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

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

    }
    return newArr;
}

这肯定会奏效。希望我有所帮助。 这里是小提琴:https://jsfiddle.net/rok_ed/coakcd3L/