我在数组中嵌套了数组,如何获取选中的 id?
[{
no: 1,
car: [{
id: 123,
name: 'abc'
},{
id: 456,
name: 'def',
checked: true
}]
}]
所以在本例中它是['456']
,但是如何使用 es6 来做到这一点而不使用 concact.apply 或使用推送方法改变变量?
最佳答案
您可以使用 Array#filter
和 Array#map
方法。
var data = [{
no: 1,
car: [{
id: 123,
name: 'abc'
}, {
id: 456,
name: 'def',
checked: true
}]
}];
console.log(
data[0].car.filter(o => o.checked).map(o => o.id)
)
更新 1:使用 Array#reduce
方法的多个元素的通用解决方案。
var data = [{
no: 1,
car: [{
id: 123,
name: 'abc'
}, {
id: 456,
name: 'def',
checked: true
}]
}, {
no: 1,
car: [{
id: 123,
name: 'abc'
}, {
id: 345,
checked: true
}]
}];
console.log(
data.reduce((arr, d) => {
[].push.apply(arr, d.car.filter(o => o.checked).map(o => o.id));
return arr;
}, [])
)
更新2:您可以通过使用Array#push
来避免spread syntax方法,但我认为这不是一种优雅的方式。
var data = [{
no: 1,
car: [{
id: 123,
name: 'abc'
}, {
id: 456,
name: 'def',
checked: true
}]
}, {
no: 1,
car: [{
id: 123,
name: 'abc'
}, {
id: 345,
checked: true
}]
}];
console.log(
data.reduce((arr, d) => [...arr, ...d.car.filter(o => o.checked).map(o => o.id)], [])
)
// or with spread with push, which would be better alternative
console.log(
data.reduce((arr, d) => (arr.push(...d.car.filter(o => o.checked).map(o => o.id)), arr), [])
)
关于javascript - 不使用 concat apply 收集嵌套属性中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48456094/