2015-07-06 76 views
2

我试图编写一个程序来删除数组中的所有零,空字符串,空值或未定义值。但是,当我运行这个数组:[1,null,2,3,0,-1,1.1]时,通过下面的代码返回数组中仍然存在null和0值的数组。任何帮助?从Javascript中删除数组中的某些元素

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

回答

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; 
} 
2

您需要将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; 
} 
2

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

+0

它还应该指出,这将返回一个新的数组,它不会改变现有的数组。 – Oka

+0

@Oka是...需要重新否定它 –

1

非常简单化,

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

但会通过

arr = arr.filter(function(item) { 
    return !!item && !isNaN(item); 
}); 
让真正的和其他非数值

可能会更好地工作(没有自己测试过 - 留下你想尝试的东西)

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

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/