我有一个带对象的数组
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()
}
}
。
答案 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);