Javascript 如何获取一个数组的所有数组对象

Javascript 如何获取一个数组的所有数组对象,javascript,ecmascript-6,Javascript,Ecmascript 6,数组对象内部有一个目标数组: [ { _id: 'main1', target: [ { _id: '1', foo: [bar] }, { _id: '2', foo: [bar] } ] }, { _id: 'main2', target: [ { _id: '3', foo: [bar] }, { _id: '4', foo: [bar] } ] } ] 我需要将所有目标

数组对象内部有一个目标数组:

[ 
  { 
    _id: 'main1',
    target: [
      { _id: '1', foo: [bar] },
      { _id: '2', foo: [bar] }
    ]
  },
  { 
    _id: 'main2',
    target: [
      { _id: '3', foo: [bar] },
      { _id: '4', foo: [bar] }
    ]
  }
]
我需要将所有目标对象作为一个数组:

需要的结果

targets: [
  { _id: '1', foo: [bar] },
  { _id: '2', foo: [bar] }
  { _id: '3', foo: [bar] },
  { _id: '4', foo: [bar] }
]
我尝试使用
map()

但这会产生一个嵌套数组,如:
[[{u id:'1',foo:[bar]}]]

var数组=[
{ 
_id:'main1',
目标:[
{{u id:'1',foo:[“bar”]},
{{u id:'2',foo:[“bar”]}
]
},
{ 
_id:'main2',
目标:[
{{u id:'3',foo:[“bar”]},
{{u id:'4',foo:[“bar”]}
]
}
]
console.log(
map(item=>item.target)

)
您可以使用
concat
加入阵列。使用扩展运算符和
map
在阵列中循环

让arr=[{{u id:'main1',target:[{{u id:'1',foo:['bar']},{{u id:'bar']},{{u id:'main2',target:[{u id:'3',foo:['bar']},{u id:'4',foo:['bar']}];
让result=[].concat(…arr.map(o=>o.target));

控制台日志(结果)
您可以使用
concat
加入数组。使用扩展运算符和
map
在阵列中循环

让arr=[{{u id:'main1',target:[{{u id:'1',foo:['bar']},{{u id:'bar']},{{u id:'main2',target:[{u id:'3',foo:['bar']},{u id:'4',foo:['bar']}];
让result=[].concat(…arr.map(o=>o.target));
控制台日志(结果)
var arr=[
{ 
_id:'main1',
目标:[
{{u id:'1',foo:[“bar”]},
{{u id:'2',foo:[“bar”]}
]
},
{ 
_id:'main2',
目标:[
{{u id:'3',foo:[“bar”]},
{{u id:'4',foo:[“bar”]}
]
}
]
var结果=arr.reduce((a,o)=>a.concat(o.target),[]);
控制台日志(结果)
var arr=[
{ 
_id:'main1',
目标:[
{{u id:'1',foo:[“bar”]},
{{u id:'2',foo:[“bar”]}
]
},
{ 
_id:'main2',
目标:[
{{u id:'3',foo:[“bar”]},
{{u id:'4',foo:[“bar”]}
]
}
]
var结果=arr.reduce((a,o)=>a.concat(o.target),[]);
控制台日志(结果)您可以使用。它在数组中循环(类似于
map()
),但同时创建一个新结果

array.reduce((result, current) => {
    result = [...result, ...current.target]
    return result;
}, []);
或者,如果不能使用,可以使用
concat()

array.reduce((result, current) => {
    result = result.concat(current.target);
    return result;
}, []);
你可以用。它在数组中循环(类似于
map()
),但同时创建一个新结果

array.reduce((result, current) => {
    result = [...result, ...current.target]
    return result;
}, []);
或者,如果不能使用,可以使用
concat()

array.reduce((result, current) => {
    result = result.concat(current.target);
    return result;
}, []);
var数组=[
{
_id:'main1',
目标:[
{{u id:'1',foo:[“bar”]},
{{u id:'2',foo:[“bar”]}
]
},
{
_id:'main2',
目标:[
{{u id:'3',foo:[“bar”]},
{{u id:'4',foo:[“bar”]}
]
}
] ;
var结果=[];
for(数组中的var键){
target=数组[key]。目标;
用于(目标中的var kt){
结果推送(目标[kt]);
}
}
控制台日志(结果)
var数组=[
{
_id:'main1',
目标:[
{{u id:'1',foo:[“bar”]},
{{u id:'2',foo:[“bar”]}
]
},
{
_id:'main2',
目标:[
{{u id:'3',foo:[“bar”]},
{{u id:'4',foo:[“bar”]}
]
}
] ;
var结果=[];
for(数组中的var键){
target=数组[key]。目标;
用于(目标中的var kt){
结果推送(目标[kt]);
}
}

控制台日志(结果)
您可以使用
reduce
方法()

此答案在连接之前检查属性
目标

let targets = obj_arr.reduce((a,c)=>c.target&&a.concat(c.target),[]);
let obj_arr=[{
_id:'main1',
目标:[{
_id:'1',
foo:[“”]
},
{
_id:'2',
foo:[“”]
}
]
},
{
_id:'main2',
目标:[{
_id:'3',
foo:[“”]
},
{
_id:'4',
foo:[“”]
}
]
}
]
让目标=目标值减少((累加器,当前值)=>
current_value.target和accumulator.concat(current_value.target),[]);

控制台日志(目标)
您可以使用
reduce
方法()

此答案在连接之前检查属性
目标

let targets = obj_arr.reduce((a,c)=>c.target&&a.concat(c.target),[]);
let obj_arr=[{
_id:'main1',
目标:[{
_id:'1',
foo:[“”]
},
{
_id:'2',
foo:[“”]
}
]
},
{
_id:'main2',
目标:[{
_id:'3',
foo:[“”]
},
{
_id:'4',
foo:[“”]
}
]
}
]
让目标=目标值减少((累加器,当前值)=>
current_value.target和accumulator.concat(current_value.target),[]);
控制台日志(目标)
var foo=[
{
“_id”:“main1”,
“目标”:[
{
“_id”:“1”,
“foo”:“[酒吧]”
},
{
“_id”:“2”,
“foo”:“[酒吧]”
}
]
},
{
“_id”:“main2”,
“目标”:[
{
“_id”:“3”,
“foo”:“[酒吧]”
},
{
“_id”:“4”,
“foo”:“[酒吧]”
}
]
}
]
var-bar=[];
foo.map(函数(val){
bar=bar.concat(val.target);
})
console.log(条)
var foo=[
{
“_id”:“main1”,
“目标”:[
{
“_id”:“1”,
“foo”:“[酒吧]”
},
{
“_id”:“2”,
“foo”:“[酒吧]”
}
]
},
{
“_id”:“main2”,
“目标”:[
{
“_id”:“3”,
“foo”:“[酒吧]”
},
{
“_id”:“4”,
“foo”:“[酒吧]”
}
]
}
]
var-bar=[];
foo.map(函数(val){
bar=bar.concat(val.target);
})

console.log(bar)
如果你有下划线或lodash这样的库,你可以使用flatmap函数如果你有下划线或lodash这样的库,你可以使用flatmap函数我不知道为什么有人否决了这一点。这是一个正确的答案(参见我的类似答案)。你可以使用。。。接线员而不是concat我不知道为什么有人否决了这个。这是一个正确的答案(参见我的类似答案)