编写一个函数来测试数组中的每个对象是否有特定的键,即使存在键,也会持续出错



我有一个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));

相关内容

最新更新