如果我有一个JSON数组:
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(...)}
答案 0 :(得分: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 :(得分:2)
使用Array.map()
:
arrays = arrays.map(function(array) {
return array.filter(function(n){ return n != null; });
});
我使用了n != null
,除了null
和undefined
之外,它会保留任何值。而!!n
也会排除""
和0
。
答案 2 :(得分:1)
试试这个:
arrays.forEach(function(array, index){
arrays[index] = array.filter(function(n){return !!n});
});