如何散布数组的内部数组元素?

时间:2019-05-30 17:23:01

标签: javascript arrays

我正在尝试扩展数组的内部数组元素,但无法弄清楚它是如何工作的。

输入:

[1,2,[3,4],[5,6]]

输出:

[1,2,3,4,5,6] 

如何将第一个数组转换为第二个数组?

4 个答案:

答案 0 :(得分:1)

您可以为数组生成一个检查元素的生成器,对于数组,它返回嵌套的元素。

function* flat() {
    var i = 0;
    while (i < this.length) {
        if (Array.isArray(this[i])) {
            this[i][Symbol.iterator] = flat;
            yield* this[i];
        } else {
            yield this[i];
        }
        i++;
    }
}

var array = [1, 2, [3, 4], [5, 6], [7, [8, 9]]];
array[Symbol.iterator] = flat;

console.log([...array]);

答案 1 :(得分:0)

使用flat函数:

var a = [1,2,[3,4],[5,6]] ;
a = a.flat();
console.log(a);

答案 2 :(得分:0)

var array = [1,2,[3,4],[5,6]];
var newArray = [].concat(...array);
console.log(newArray); // [1, 2, 3, 4, 5, 6]

答案 3 :(得分:0)

术语是“扁平化”-这是一个简单的一级扁平化功能:

const arr = [1, 2, [3, 4], [5, 6]];
const flatten = a => a.reduce((acc, curr) => acc.concat(curr), []);
console.log(flatten(arr));
.as-console-wrapper { max-height: 100% !important; top: auto; }

深度嵌套的数组需要不同的方法-这是一个递归函数:

const arr = [1, 2, [3, 4, "a", ["b", "c"]], [5, 6]];
const flatten = a => a.reduce((acc, curr) => acc.concat(Array.isArray(curr) ? flatten(curr) : curr), []);
console.log(flatten(arr));
.as-console-wrapper { max-height: 100% !important; top: auto; }