我试图根据嵌套数组对象中的布尔值返回主对象中的值。如果主数组中的值为真,那么它应该查找子数组中的槽,并只返回那些为真的槽。我已经尝试了很长一段时间,但似乎找不到解决方案。它返回嵌套数组中的所有对象,无论是true还是false。会很感谢你的帮助。
const DATA = [
{
day: 'Monday',
label: 'Monday',
checked: false,**strong text**
slots: [
{slot: '9-10', checked: false},
{slot: '10-11', checked: false},
],
},
{
day: 'Tuesday',
label: 'Tuesday',
checked: false,
slots: [
{slot: '9-10', checked: false},
{slot: '10-11', checked: false},
],
},
{
day: 'Wednesday',
label: 'Wednesday',
checked: false,
slots: [
{slot: '9-10', checked: false},
{slot: '10-11', checked: false},
],
},
{
day: 'Thursday',
label: 'Thursday',
checked: false,
slots: [
{slot: '9-10', checked: false},
{slot: '10-11', checked: false},
],
},
{
day: 'Friday',
label: 'Friday',
checked: false,
slots: [
{slot: '9-10', checked: false},
{slot: '10-11', checked: false},
],
},
{
day: 'Saturday',
label: 'Saturday',
checked: false,
slots: [
{slot: '9-10', checked: false},
{slot: '10-11', checked: false},
],
},
];
useEffect(() => {
setDaysCollection(DATA);
}, []);
const selectedDays = daysCollection.filter(
(item: any) =>
item.checked == true &&
item.slots.filter(r => r.checked == true),
);
setSelectedItem(selectedDays);
发布于 2021-04-14 19:25:25
Array.prototype.filter()
需要一个布尔型返回值,虽然您可以使用它来改变原始数组,但使用返回的数组更简洁。
下面是一个使用some()
断言已检查插槽的示例,以及进一步过滤嵌套数组的map()
调用。
//{ day: 'Tuesday', label: 'Tuesday', checked: true, slots: [{ slot: '9-10', checked: false }, { slot: '10-11', checked: true },], }
const DATA = [{ day: 'Monday', label: 'Monday', checked: false, slots: [{ slot: '9-10', checked: false }, { slot: '10-11', checked: false },], }, { day: 'Tuesday', label: 'Tuesday', checked: true, slots: [{ slot: '9-10', checked: false }, { slot: '10-11', checked: true },], }, { day: 'Wednesday', label: 'Wednesday', checked: false, slots: [{ slot: '9-10', checked: false }, { slot: '10-11', checked: false },], }, { day: 'Thursday', label: 'Thursday', checked: false, slots: [{ slot: '9-10', checked: false }, { slot: '10-11', checked: false },], }, { day: 'Friday', label: 'Friday', checked: false, slots: [{ slot: '9-10', checked: false }, { slot: '10-11', checked: false },], }, { day: 'Saturday', label: 'Saturday', checked: false, slots: [{ slot: '9-10', checked: false }, { slot: '10-11', checked: false },], },];
const result = DATA
.filter(({ checked, slots }) =>
checked && slots.some(({ checked }) => checked)
)
.map(o => ({ ...o, slots: o.slots.filter(({ checked }) => checked) }));
console.log(result);
https://stackoverflow.com/questions/67090573
复制相似问题