我正在尝试过滤一系列嵌套数组中的空字符串条目,但filter实际上并未使数组发生变化。
const text = [
['222','','ghy','','hthb'],
['333','','ghw','','5gth'],
['444','','fht','','5gbh'],
]
text.map(el=>el.filter(entry => entry.trim() != ''))
console.log(text)
答案 0 :(得分:5)
您可以分配映射的新阵列。
var text = [['222', '', 'ghy', '', 'hthb'], ['333', '', 'ghw', '', '5gth'], ['444', '', 'fht', '', '5gbh']]
text = text.map(a => a.filter(Boolean));
console.log(text);
答案 1 :(得分:2)
这是因为map
和filter
不是就地操作,它们返回新数组。
let text = [
['222', '', 'ghy', '', 'hthb'],
['333', '', 'ghw', '', '5gth'],
['444', '', 'fht', '', '5gbh'],
]
text = text.map(el => el.filter(entry => entry.trim() != ''))
console.log(text)
答案 2 :(得分:2)
map()
和filter()
返回新数组,它们不会在适当位置修改数组。
如果要在适当的位置修改原始顶级数组,可以使用forEach()
并分配回数组索引。
请注意,这仍然会创建新的嵌套数组,没有filter()
的就地版本(尽管使用splice()
自己编写也很容易)。
let text = [
['222', '', 'ghy', '', 'hthb'],
['333', '', 'ghw', '', '5gth'],
['444', '', 'fht', '', '5gbh'],
]
text.forEach((el, i) => text[i] = el.filter(entry => entry.trim()))
console.log(text)
您也不需要测试!= ''
,因为空字符串是falsey。