Javascript 在嵌套属性中收集数组,而不使用concat apply
我在数组中嵌套了数组,如何检查数组的idJavascript 在嵌套属性中收集数组,而不使用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,, 汽车:[{
[{
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()