Javascript 在嵌套属性中收集数组,而不使用concat apply

Javascript 在嵌套属性中收集数组,而不使用concat apply,javascript,ecmascript-6,Javascript,Ecmascript 6,我在数组中嵌套了数组,如何检查数组的id [{ no: 1, car: [{ id: 123, name: 'abc' },{ id: 456, name: 'def', checked: true }] }] 因此,在本例中是['456'],但如何使用es6而不使用conact.apply或使用push方法对变量进行变异?您可以使用和方法 var数据=[{ 否:1,, 汽车:[{

我在数组中嵌套了数组,如何检查数组的id

[{
    no: 1,
    car: [{
        id: 123,
        name: 'abc'
    },{
        id: 456,
        name: 'def',
       checked: true
    }]
}]
因此,在本例中是
['456']
,但如何使用es6而不使用conact.apply或使用push方法对变量进行变异?

您可以使用和方法

var数据=[{
否:1,,
汽车:[{
id:123,
姓名:“abc”
}, {
身份证号码:456,
名称:“def”,
核对:正确
}]
}];
console.log(
数据[0].car.filter(o=>o.checked).map(o=>o.id)

)
使用
过滤器
映射

var数据=[{
否:1,,
汽车:[{
id:123,
姓名:“abc”
}, {
身份证号码:456,
名称:“def”,
核对:正确
}, {
身份证号码:69,
名字:'福特',
核对:正确
}]
}];
var id=data[0].car.filter(c=>c.checked).map(c=>c.id)

console.log(id)
您可以使用获取一组汽车,获取检查过的汽车,然后映射到
id
来获得结果。当前结果是一个数组数组

要在ES6中展平结果,您可以将其扩展到concat中,而不是应用它

const data=[{“no”:1,“car”:[{“id”:123,“name”:“abc”},{“id”:456,“name”:“def”,“checked”:true}]
常量结果=[].concat(…数据)
.map((o)=>o.car
.filter(o=>o.checked)
.map(o=>o.id)))

console.log(result)
我认为这是 每当我需要
过滤
映射
数组时,我会立即尝试使用
减少
,这样我就可以减少需要在数组上执行的循环数

使用
reduce
可以有条件地
将对象推送到(这就像进行过滤)
当你推它的时候,你可以决定你想要推的对象的形状(这就像做贴图一样)

在这种情况下使用
push
是可以的,因为您正在变异本地数组而不是外部数组

以下是此类用例的示例:

var数据=[{
否:1,,
汽车:[{
id:123,
姓名:“abc”
}, {
身份证号码:456,
名称:“def”,
核对:正确
}]
}];
const nextData=data.reduce((结果,当前)=>{
常数展平=当前车辆减少((r,c)=>{
如果(c.checked){//filter
r、 推送(c.id);//映射
}
返回r;
},[]);
结果:推动(…变平);
返回结果;
}, [])

console.log(nextData)
您没有使用嵌套数组,而是显式选择了第一个元素(
data[0]
)。这个问题太模糊,无法得到明确的答案。他的回答很有道理any@aaaaaa这个问题有什么模棱两可的地方?它清楚地提到了数组中的嵌套数组。OP正在寻找一个
flatMap
实现,而不使用
concat.apply()
或在另一个数组中循环和推送结果。这有什么不明确的地方?您清楚地了解他们正在处理的对象的模式,并希望得到结果。哦,等等……更新后的答案使用
push()
来变异问题中指定为不需要的变量。lodash:
\u(数据)。flatMap('car')。filter('checked')。map('id')。value()