Javascript/node 错误:flatMap 无法正常工作

问题描述 投票:0回答:2

我在写版本新闻时遇到了一些我认为是 javascript 中的错误。 代码:

const arrValor = [1,2,3,4,5,,6,[7,8,9,[10,11,[111,222]],12],13,14];
//console.log("Original :",arrValor);
console.log("mas s  :",arrValor.flatMap(val=>val+"s"));

结果:

mas s  : [
  '1s',
  '2s',
  '3s',
  '4s',
  '5s',
  '6s',
  '7,8,9,10,11,111,222,12s',
  '13s',
  '14s'
]

细节在 12 中,因为它与 7、8、9 处于同一级别,而对于那些它不添加 s... 为什么要添加到 12?

使用 Node v18.13.0 和 windows 10Pro 21H2 进行测试

我希望分层应用程序是同质的,我尝试过混合数字和字母数组,但它总是表现相同

javascript flatmap
2个回答
0
投票

.flatMap
将对提供的数组的每个元素调用回调,然后 then 展平结果。如果您在回调中返回一个数组,这将很有用 - 但这不是您在此处寻找的逻辑。如果你想为每个元素添加一个
s
,包括每个嵌套元素,并在末尾有一个扁平的arra - 那么你需要展平then map,而不是map then flatten.

const arrValor = [1, 2, 3, 4, 5, , 6, [7, 8, 9, [10, 11, [111, 222]], 12], 13, 14];
console.log(arrValor.flat(Infinity).map(val => val + "s"));


0
投票

flatMap
(就像调用
flat()
没有参数)只会拉平一层。要处理任意嵌套的数组,您可以将递归回调函数传递给
flatMap
,或者在应用
.flat(Infinity)
之前使用
map

const arrValor = [1,2,3,4,5,,6,[7,8,9,[10,11,[111,222]],12],13,14];
let res = arrValor.flat(Infinity).map(val => val + 's');
console.log(res);

© www.soinside.com 2019 - 2024. All rights reserved.