¿Hay alguna manera de ver si un elemento se encuentra en un diccionario de valores?
Mi intento:
var inventory_needed = [ { section: "hardware", supplies: "hammers" }, { section: "plumbing", supplies: "pipes" }, { section: "garden", supplies: "grass seeds" }, { section: "cleaning supplies", supplies: ["hand sanitizer", "detergent"] }, { section: "appliances", supplies: ["fridges", "dishwashers"] } ]; incoming_item = "hand sanitizer"; inventory_needed.forEach(function(item) { if(item.supplies.includes(incoming_item)) { console.log(incoming_item + 'is on the way'); } else{ console.log('nothing is on the way'); } }Podrías simplificar tu búsqueda de esta manera:
if (inventory_needed.some(item => item.supplies.includes(incoming_item))) { console.log(incoming_item + ' is on the way'); } else { console.log('nothing is on the way'); } Esto solo saldrá una vez. No está claro si desea o no que el mensaje is on the way para poder imprimirse varias veces.
Array.prototype.some() le permitirá ejecutar una verificación de true / false para cada elemento de la lista, y devolverá si alguno de ellos fue true o no.
Dado que su matriz de suministros consiste en una cadena y una matriz, le sugiero esta lógica a continuación.
Lógica
map a través de la matriz y genere una lista de suministros.Array.flat la matriz para hacer que la matriz sea unidireccional. Array.flatMap para combinar Array.map y Array.flatSet usando Set.has .Código de trabajo
const inventory_needed = [ { section: "hardware", supplies: "hammers" }, { section: "plumbing", supplies: "pipes" }, { section: "garden", supplies: "grass seeds" }, { section: "cleaning supplies", supplies: ["hand sanitizer", "detergent"] }, { section: "appliances", supplies: ["fridges", "dishwashers"] } ]; const incoming_item = "hand sanitizer"; const uniqueSuppliesList = new Set(inventory_needed.flatMap((item) => item.supplies)); uniqueSuppliesList.has(incoming_item) ? console.log(incoming_item + 'is on the way') : console.log('nothing is on the way');