Estoy escribiendo una función que iterará a través de un objeto para encontrar si existe el par clave: valor y, de ser así, se agrega a otra matriz (en caso de que haya varias coincidencias)
La matriz contiene objetos. La función toma como argumento qué clave y valor está buscando y luego itera a través de la matriz hasta que lo encuentra. Como puede ver, la clave es una variable y mi problema es que no estoy seguro de cómo acceder a la propiedad del objeto cuando me refiero a un valor variable.
for (let i = 0; i < arr.length; i++) { if (arr[i].[key] == value) { result.push(arr[i]); } }
Pensé que ponerlo en [clave] ayudaría, pero obviamente estaba equivocado. Intenté buscar en Google cómo hacerlo, pero supongo que no puedo expresarlo con palabras.
Está confundiendo la notación de puntos con la notación de corchetes .
Retire el .
; arr[i].[key] == value1
debe ser arr[i][key] == value
.
const arr = [{ 'a': 'b' }] key = 'a' value = 'b' const result = [] for (let i = 0; i < arr.length; i++) { if (arr[i][key] == value) { result.push(arr[i]); } } console.log(result)
Puedes simplificar el código usando filter
:
const arr = [{ 'a': 'b' }] key = 'a' value = 'b' const result = arr.filter(e => e[key] == value) console.log(result)
Ya casi estás allí, solo deshazte del extra .
entre [i]
y [key]
:
for (let i = 0; i < arr.length; i++) { if (arr[i][key] == value) { result.push(arr[i]); } }
Sin embargo, habría una forma más simple y directa, usando filter
:
const result = arr.filter(obj => obj[key] == value)
Ejemplo:
const arr = [ { a: 1, b: 1 }, { a: 1, b: 2 }, { a: 2, b: 1 }, { a: 2, b: 2 } ] const key = 'b' const value = 1 const result = arr.filter(obj => obj[key] == value) console.log(result) // Output: [{ a: 1, b: 1 }, { a: 2, b: 1 }]
const arr = [ {name:"Evan", age:28}, {name:"John", age:23}, {name:"Anne", age:28}, ]; const searchProp = "age"; const searchValue = 28; const result = arr.filter((user) => user[searchProp] === searchValue); console.log(result)