Concat将多维数组转换为一维数组

时间:2016-09-10 09:03:39

标签: javascript arrays multidimensional-array

我有一个带对象的数组

const nodes = [ { children: [1, 2, 3] }, { children: [1, 2, 3] } ];

我想要一个新数组[ 1, 2, 3, 1, 2, 3 ]

我试过了

nodes.map(node => node.children);

但它给了我[ [ 1, 2, 3 ], [ 1, 2, 3 ] ]

我试过了

[].concat(nodes.map(node => node.children));

但它不起作用,因为它只是将[][ [ 1, 2, 3 ], [ 1, 2, 3 ] ]联系起来,而[ [ 1, 2, 3 ], [ 1, 2, 3 ] ]只是buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.1.3' } } allprojects { repositories { jcenter() } }

3 个答案:

答案 0 :(得分:3)

您可以使用Array#reduce

执行此操作



const nodes = [ { children: [1, 2, 3] }, { children: [1, 2, 3] } ];

var result = nodes.reduce(function(r, o) {
  r = r.concat(o.children);
  return r;
}, []);

console.log(result)




答案 1 :(得分:3)

您可以使用Array#reduce

const nodes = [ { children: [1, 2, 3] }, { children: [1, 2, 3] } ],
      result = nodes.reduce((r, node) => r.concat(node.children), []);

console.log(result);
console.log([... new Set(result)]); // for unique values
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 2 :(得分:1)

使用Array#forEach执行此操作的另一种方法:

const nodes = [ { children: [1, 2, 3] }, { children: [1, 2, 3] } ]
final = []
nodes.forEach(x => final = final.concat(x.children))
console.log(final)

另一个较短的方法是(对OP试图做的一点修改):

const nodes = [ { children: [1, 2, 3] }, { children: [1, 2, 3] } ];
var result = [].concat.apply([], nodes.map(x => x.children))
console.log(result);