const inventory = [
{ name: { vegetable: 'carrot' }, quantity: 2 },
{ name: { meat: 'pork' }, quantity: 0 },
{ name: { fruit: 'cherries' }, quantity: 5 },
];
const result = inventory.find(name => name === { fruit: 'cherries' });
console.log(result);
我有一个嵌套的对象数组,我试图找出是否有一个包含{ fruit: 'cherries' }
对象的对象,但是结果是未定义。
所以我想您不能将对象作为搜索参数传递?
答案 0 :(得分:1)
您需要写入对象的完整路径,并通过.
符号访问对象:
const result = inventory.find(name => name.name.fruit === 'cherries');
一个例子:
const inventory = [
{ name: { vegetable: 'carrot' }, quantity: 2 },
{ name: { meat: 'pork' }, quantity: 0 },
{ name: { fruit: 'cherries' }, quantity: 5 },
];
const result = inventory.find(name => name.name.fruit === 'cherries');
console.log(result);
最好在调试器中看到对象的属性的实际路径:
const result = inventory.find(name => {
if(name.name.fruit === 'cherries')
return name;
return;
});
console.log(result);
答案 1 :(得分:0)
您无法比较对象,因为它们具有不同的引用。一种方法可能是使用 destructuring ,而只是访问fruit
属性以便将其与给定的值进行比较。 >
const inventory = [
{ name: { vegetable: 'carrot' }, quantity: 2 },
{ name: { meat: 'pork' }, quantity: 0 },
{ name: { fruit: 'cherries' }, quantity: 5 },
];
const result = inventory.find(({name}) => name.fruit == "cherries");
console.log(result);
答案 2 :(得分:0)
答案 3 :(得分:0)
感谢所有建议。 我想我找到了解决问题的方法。
我使用array.map
创建了一个仅由 name对象组成的新数组。
然后,我在JSON.stringify
和新数组中的元素上使用了selectedOption
来查找匹配项和/或索引。
可能有更好的方法,但这可以正常工作。 随时指出我的方法中可能存在的缺陷。
const selectedOption = {fruit_red: "cherries", fruit_green: "kiwi"}
const inventory = [
{ name: { vegetable: 'carrot' }, quantity: 2 },
{ name: { meat: 'pork' }, quantity: 0 },
{ name: { fruit_red: 'cherries', fruit_green: 'kiwi' }, quantity: 5 },
{ name: { fruit_red: 'cherries', fruit_green: 'apple' }, quantity: 3 },
];
const names = inventory.map(item => item.name)
const resultIndex = names.findIndex(name => JSON.stringify(name) === JSON.stringify(selectedOption));
console.log(resultIndex)
const result = names.find(name => JSON.stringify(name) === JSON.stringify(selectedOption));
console.log(result)
console.log(inventory[resultIndex])