过滤嵌套在一个班轮中另一个数组内的数组

时间:2019-12-18 18:56:37

标签: javascript

我正在尝试过滤一系列嵌套数组中的空字符串条目,但filter实际上并未使数组发生变化。

const text = [
  ['222','','ghy','','hthb'],
  ['333','','ghw','','5gth'],
  ['444','','fht','','5gbh'],
]

text.map(el=>el.filter(entry => entry.trim() != ''))

console.log(text)

3 个答案:

答案 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)

这是因为mapfilter不是就地操作,它们返回新数组。

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。