2014-07-09 49 views
1

如果我有一个JSON阵列:如何从“null”和“undefined”值过滤嵌套数组?

arrays = 
    [ 
     [ 
     undefined, 
     ",", 
     " ", 
     "simple" 
     ], 
     [ 
     undefined, 
     null, 
     " ", 
     "phrase" 
     ], 
     [ 
     undefined, 
     ",", 
     " ", 
     "one" 
     ], 
     [ 
     undefined, 
     null, 
     " ", 
     "another" 
     ], 
     [ 
     undefined, 
     null, 
     " ", 
     "phrase" 
     ] 
    ] 

,我想从undefined过滤和null值:

arrays.forEach(function(array){array.filter(function(n){return !!n})}); 

arrays.forEach(function(array){array = array.filter(function(n){return !!n})}); 

但它返回相同的数组没有任何变化。

否则,如果我与内部阵列直接工作,它的工作原理:

rest_words[0].filter(function(n){return !!n}); 
=> [",", " ", "simple"] 

为什么forEach()不允许修改的阵列?它是否仅按值重复?通过迭代修改数组的最佳解决方案是什么?

我希望有更多的东西然后就通过for(i=0, i<arrays.length, i++){arrays[i] = arrays[i].filter(...)}

回答

4

您只是分配到当地的array变量,并且不写入实际的arrays属性。你可以做

arrays.forEach(function(array, i, all) { 
    all[i] = array.filter(Boolean); // where all===arrays 
}); 

,但你好得多使用map创建一个新的数组:

refinedArrays = arrays.map(function(array) { 
    return array.filter(Boolean); 
}); 
1

迭代试试这个:

arrays.forEach(function(array, index){ 
    arrays[index] = array.filter(function(n){return !!n}); 
}); 
2

使用Array.map()

arrays = arrays.map(function(array) { 
    return array.filter(function(n){ return n != null; }); 
}); 

我用n != null这将让任何价值,除了nullundefined。而!!n也不包括""0