如何在嵌套的对象数组中找到索引?



我有一个嵌套的名为dishes的对象数组,其中有唯一的id。如果id存在于dishes中的foodItems中,我想找到数组的索引,然后将其从foodItems中删除

const dishes = [{
cuisine: 'Chinese',
foodItems: [{
id: '1',
dishName: 'Chicken noodles',
price: '6.00 USD'
},
{
id: '2',
dishName: 'Fried rice',
price: '5.00 USD'
},
{
id: '3',
dishName: 'Dumplings',
price: '2.00 USD'
}
],
},
{
cuisine: 'Indian',
foodItems: [{
id: '4',
dishName: 'Tikka masala',
price: '10.00 USD'
},
{
id: '5',
dishName: 'Naan Bread',
price: '2.00 USD'
},
{
id: '6',
dishName: 'Dal Fry',
price: '4.00 USD'
}
],
}
];

这里,是我尝试过的(这是不工作的,并返回index中的undefined):

let removeId = (id) => {
let index = dishes.forEach(dish => dish.foodItems.findIndex(item => item.id === id)); // returns undefined
if (index !== -1) {
dishes.forEach(dish=> dish.foodItems.splice(index, 1)); // remove obj from foodItems array
return true;
} else {
return false;
}
}

您需要在forEach()回调方法中包含其余的逻辑。然而,考虑到您希望在项目被删除后返回true,使用for ... of循环更容易:

const dishes = [{
cuisine: 'Chinese',
foodItems: [{
id: '1',
dishName: 'Chicken noodles',
price: '6.00 USD'
},
{
id: '2',
dishName: 'Fried rice',
price: '5.00 USD'
},
{
id: '3',
dishName: 'Dumplings',
price: '2.00 USD'
}
],
},
{
cuisine: 'Indian',
foodItems: [{
id: '4',
dishName: 'Tikka masala',
price: '10.00 USD'
},
{
id: '5',
dishName: 'Naan Bread',
price: '2.00 USD'
},
{
id: '6',
dishName: 'Dal Fry',
price: '4.00 USD'
}
],
}
];
const removeId = (id) => {
for (let dish of dishes) {
const index = dish.foodItems.findIndex(fi => fi.id === id);
if (index > -1) {
dish.foodItems.splice(index, 1);
return true;
}
};
return false;
}
console.log(removeId('1'));
console.log(removeId('4'));
console.log(removeId('7'));
console.log(dishes);

您可以尝试一下,使用for循环并添加条目变量

const dishes = [
{
cuisine: "Chinese",
foodItems: [
{
id: "1",
dishName: "Chicken noodles",
price: "6.00 USD",
},
{
id: "2",
dishName: "Fried rice",
price: "5.00 USD",
},
{
id: "3",
dishName: "Dumplings",
price: "2.00 USD",
},
],
},
{
cuisine: "Indian",
foodItems: [
{
id: "4",
dishName: "Tikka masala",
price: "10.00 USD",
},
{
id: "5",
dishName: "Naan Bread",
price: "2.00 USD",
},
{
id: "6",
dishName: "Dal Fry",
price: "4.00 USD",
},
],
},
];
for (const [idx, items] of dishes.entries()) {
console.log(items.foodItems)
}

在这里的文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of

最新更新