在JavaScript中展平嵌套数组

杰斯

我有一个看起来像这样的可怕数组:

编辑:

array = [
    {
        Letters: [{ Letter: 'A' }, { Letter: 'B' }, { Letter: 'C' }],
        Numbers: [{ Number: '1' }, { Number: '2' }, { Number: '3' }]
    },
    null,
    {
        Letters: [{ Letter: 'D' }, { Letter: 'E' }, { Letter: 'F' }, { Letter: 'G' }, { Letter: 'H' }],
        Numbers: [{ Number: '4' }, { Number: '5' }, { Number: '6' }, { Number: '7' }]
    }
];

并希望数组看起来像这样:

flattenedArray = [a,b,c,1,2,3,d,e,f,g,h,4,5,6,7]

不幸的是,我无法更改原始格式,因为这是合并两个获取的API响应时收到的表格。

我试过使用:

var flattenedArray = [].concat.apply([], array);

但是它只是以与输入时相同的格式显示数组。

我想知道是否有人提出建议?

编辑:我已经尝试执行给出的建议-非常感谢您的帮助。列表格式似乎有问题-不幸的是,使用chrome控制台以“树”格式显示时,我看不到数组输出的直接结构。

谢谢你的帮助!编辑2:请参阅上面的实际数组,谢谢您向我展示了如何看到这一点!

妮娜·斯科茨(Nina Scholz)

编辑嵌套数组/对象和展平的新请求,可以结合使用组合方法来测试元素的类型。

var array = [{ Letters: [{ Letter: 'A' }, { Letter: 'B' }, { Letter: 'C' }], Numbers: [{ Number: '1' }, { Number: '2' }, { Number: '3' }] }, null, { Letters: [{ Letter: 'D' }, { Letter: 'E' }, { Letter: 'F' }, { Letter: 'G' }, { Letter: 'H' }], Numbers: [{ Number: '4' }, { Number: '5' }, { Number: '6' }, { Number: '7' }] }],
    result = array.reduce(function iter(r, a) {
        if (a === null) {
            return r;
        }
        if (Array.isArray(a)) {
            return a.reduce(iter, r);
        }
        if (typeof a === 'object') {
            return Object.keys(a).map(k => a[k]).reduce(iter, r);
        }
        return r.concat(a);
    }, []);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

旧的要求和不朽的问题是如何展平嵌套数组。

var flat = (r, a) => Array.isArray(a) ? a.reduce(flat, r) : r.concat(a),
    inputArray = array = [[['a', 'b', 'c'], [1, 2, 3]], [], [['d', 'e', 'f', 'g', 'h'], [4, 5, 6, 7]]],
    outputArray = inputArray.reduce(flat, []);

console.log(outputArray);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章