Tengo una matriz anidada de objetos llamados dishes que tienen identificaciones únicas. Quiero encontrar el índice de la matriz si la id está presente en foodItems en dishes y luego eliminarla de 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' } ], } ]; Esto es lo que probé (que no funciona y no está undefined en index ):
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; } }Debe incluir el resto de su lógica en el método de devolución de llamada forEach() . Sin embargo, teniendo en cuenta que desea devolver true una vez que se eliminó el elemento, es más fácil usar un bucle 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);Puede probar esto, usando una variable for of y agregar entradas lo que for loop
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) }para la documentación aquí: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of