tengo una matriz que se ve así
let arrayExample = [ { "size":"6M", "color":"Blue" } , { "size":"2M", "color":"Yellow" } ]
actualmente, para devolver todos los elementos de un color específico o un tamaño específico, utilizo este enfoque
var allColors= arrayExample.map(i=>i.color) return [{"color":"Blue"}].some((val)=> allColors.includes(val.color))
mi pregunta es cómo devolver un valor real cada vez que encuentro un elemento con la combinación exacta que deseo
como se cita en https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some
Devuelve el valor verdadero si la función de devolución de llamada devuelve un valor verdadero para al menos un elemento de la matriz. De lo contrario, falso.
mi enfoque actual para esto es
var allColors= arrayExample.map(i=>i.color) var allSizes= arrayExample.map(i=>i.size) return [{"color":"Blue","size":"2M"}].some((val)=> allColors.includes(val.color) && allSizes.includes(val.size)
este enfoque no funciona para mis propósitos, sabiendo que incluso si no hay ningún elemento en mi ejemplo de arrayExample
con la combinación [{"color":"Blue","size":"2M"}]
, aún devolvería true
porque del tamaño de 2M del segundo elemento de mi matriz
aquí hay un Jsfiddle para probar mi situación https://jsfiddle.net/8htjpyb9/1/
Me gustaría agradecerle si llegó hasta aquí y también gracias por cualquier ayuda, espero que esté teniendo un buen día.
* editar -> me gustaría enfatizar que .filter no funciona para mi problema debido al resto del código en el que está incrustada esta situación.
Solo estoy interesado en devolver un valor de verdadero siempre que encuentre la coincidencia exacta.
Array#map
, itere sobre la matrizArray#some
, verifique si alguna de las combinations
coincide con el objeto actual.Object#entries
y Array#every
para verificar una combinación de propiedades que coincidan con el objeto actual. const array = [ { id: 1, size: '6M', color: 'Blue' }, { ld: 2, size: '2M', color: 'Yellow' }, { id: 3, size: '6M', color: 'Blue' } ]; const combinations = [ { "color": "Blue", "size": "6M" } ]; const matches = array.map(current => combinations.some(combination => Object.entries(combination).every(([key, value]) => current[key] === value ) ) ); console.log(matches);
Si entiendo correctamente, ¿estás buscando esto?
const getItem = (arr, toFind) => { const {size, color} = toFind; return arr.filter(item => item.color === color && item.size === size).length > 0 }; let arrayExample = [{ "size": "6M", "color": "Blue", "material": "plastic" }, { "size": "2M", "color": "Yellow", "material": "leather" } ] const res = getItem(arrayExample,{"size": "6M","color": "Blue"}) console.log(res)
Si desea devolver los objetos, el filter
de coincidencia sería un enfoque más fácil. Pase un conjunto de datos y un objeto de prueba a una función y devuelva solo aquellos objetos que tengan los mismos valores de tamaño y color que el objeto de prueba.
const data=[{id: 1,size:'6M',color:'Blue'},{ld:2,size:'2M',color:'Yellow'},{id:3,size:'6M',color:'Blue'}]; const test = { size: '6M', color: 'Blue' }; function getExact(data, test) { return data.filter(obj => { return ( obj.size === test.size && obj.color === test.color ); }); } console.log(getExact(data, test));
Si solo desea devolver true/false
si las propiedades de un objeto de matriz coinciden con las propiedades de un objeto de prueba, some
es la mejor opción.
const data=[{id: 1,size:'6M',color:'Blue'},{ld:2,size:'2M',color:'Yellow'},{id:3,size:'6M',color:'Blue'}]; const test = { size: '6M', color: 'Blue' }; const test2 = { size: '5M', color: 'Green' }; function getExact(data, test) { return data.some(obj => { return ( obj.size === test.size && obj.color === test.color ); }); } console.log(getExact(data, test)); console.log(getExact(data, test2));