我有一个React组件,只有当数据响应中的任何项包含存档的对象键并且它是真实的时,我才尝试有条件地呈现复选框。
我已经编写了一个函数来检查每个对象,但无论怎样,我都会不断出错,即使我为每个对象添加了一个存档密钥,我也不确定自己做错了什么。
这是我目前的功能和一个正在运行的Codesandbox示例:
const hasArchived = (groupItems) => {
let answer;
for (let i = 0; i < groupItems.length; i++) {
groupItems[i].hasOwnProperty("archived")
? (answer = true)
: (answer = false);
}
return answer;
};
这是groupItems数据集的一个例子:
[
[
{
name: 'item 1'
groupName: 'Marvel Characters'
archived: false
},
{
name: 'item 2'
groupName: 'Marvel Characters'
archived: true
},
{
name: 'item 3'
groupName: 'Marvel Characters'
archived: false
}
],
[
{
name: 'item 1'
groupName: 'DC Characters'
archived: false
},
{
name: 'item 2'
groupName: 'DC Characters'
archived: true
},
{
name: 'item 3'
groupName: 'DC Characters'
archived: false
}
]
]
这是因为您的数组有两个深度级别,您也可以在这个用例中使用Array.prototype.some
:
const data = [
[
{
name: 'item 1',
groupName: 'Marvel Characters',
archived: false
},
{
name: 'item 2',
groupName: 'Marvel Characters',
archived: true
},
{
name: 'item 3',
groupName: 'Marvel Characters',
archived: false
}
],
[
{
name: 'item 1',
groupName: 'DC Characters',
archived: false
},
{
name: 'item 2',
groupName: 'DC Characters',
archived: true
},
{
name: 'item 3',
groupName: 'DC Characters',
archived: false
}
]
];
const hasArchived = groupItems => groupItems.some(x => x.some(({ archived }) => archived));
console.log(hasArchived(data));