繁体   English   中英

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

[英]Deleting certain elements from an array in Javascript

我试图编写一个程序,将删除数组中的任何零,空字符串,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;
    }
}

因为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;
}

你需要移动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()和falsy值删除不需要的项目

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

非常简单,

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

但这会让真实和其他非数字值通过

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]

在这里演示

  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/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM