我在写版本新闻时遇到了一些我认为是 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 进行测试
我希望分层应用程序是同质的,我尝试过混合数字和字母数组,但它总是表现相同
.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"));
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);