Quiero que el color rojo y el tamaño de 4 gb solo generen el valor exacto, pero obtengo un tamaño de 4 gb pero el color es verde, por favor ayúdenme en este sentido. Estoy creando una opción de filtro, y mi código es el mismo, así que, si es posible, conviértalo en mi código; de lo contrario, también puede sugerir cómo puedo lograrlo.
const x = [ { color: "green", name: "123", size: "4gb" }, { color: "red", name: "555", size: "4gb" }, { color: "green", name: "123", size: "2gb" }, { color: "blue", name: "111", size: "2gb" }, { color: "green", name: "123", size: "4gb" }, { color: "red", name: "000", size: "4gb" } ] const op = [{ key: "color", item: "red" }, { key: "size", item: "4gb" }]; const fil = x.map(l => op.map(o => l[o.key] === o.item && l)).flat().filter(Boolean); console.log(fil);La salida debe ser:
[{ color: "red", name: "555", size: "4gb" },{ color: "red", name: "000", size: "4gb" }];Debería filter() en lugar de map() .
La operación principal que desea hacer es filter() lo que significa que el resultado contiene menos o la misma cantidad de valores que la matriz original, por lo que cada elemento de la matriz original puede o no estar presente en el resultado, por lo que si desea un Mapeo 1:1/0 . Una asignación siempre devuelve la misma cantidad de valores que están en la matriz original que describe una asignación 1:1 , de ahí el nombre map() .
Además, use every() para recorrer los filtros. Esto asegurará que todas/todas (nuevamente, el nombre le dice lo que hace) se cumplan las condiciones del filtro.
const x = [ { color: "green", name: "123", size: "4gb", }, { color: "red", name: "555", size: "4gb", }, { color: "green", name: "123", size: "2gb", }, { color: "blue", name: "111", size: "2gb", }, { color: "green", name: "123", size: "4gb", }, { color: "red", name: "000", size: "4gb", }, ]; const op = [ { key: "color", item: "red", }, { key: "size", item: "4gb", }, ]; const fil = x.filter(option => op.every(({key, item}) => option[key] === item)); console.log(fil); .as-console-wrapper { max-height: 100% !important; top: 0; }