【发布时间】:2021-06-02 21:39:23
【问题描述】:
我一个月前才开始学习 javascript。正在阅读 Array.prototype.flat() MDN 以解决问题,但我无法弄清楚为什么该解决方案会以这种方式工作。
他们写了关于扁平化数组的替代方法,并在以下位置使用了 reduce 和 concat:
const arr0 = [1, 2, [3, 4]];
// To flat single level array
const arr1 = arr0.flat();
console.log(arr1) // [1, 2, 3, 4]
// is equivalent to
const arr2 = arr0.reduce((acc, val) => acc.concat(val), []);
console.log(arr2) // [1, 2, 3, 4]
// or with decomposition syntax
const flattened = arr => [].concat(...arr);
const arr3 = flattened(arr0)
console.log(arr3)
通常的acc.concat(val) 对我来说很有意义。我不明白的是分解语法部分。据我了解,当您使用.concat(...arr) 时,扩展运算符会将arr 的所有值传递给.concat 方法,这意味着它应该是[1, 2, [3,4]]。为什么它在返回[1,2,3,4]的过程中居然把1级深嵌套数组展平了?
显然我理解错误。请赐教。
【问题讨论】:
-
我给你做了一个sn-p。很有用
-
相当于
[].concat(1,2,[3,4])。将数组传递给 concat 会将该数组的内容合并到被调用者中。 -
...传递非数组只是添加元素本身,这是这里的关键
标签: javascript arrays