Cómo recorrer una matriz que contiene objetos y acceder a sus propiedades
Quiero recorrer los objetos contenidos en una matriz y cambiar las propiedades de cada uno. Si hago esto:
for (var j = 0; j < myArray.length; j++){
console.log(myArray[j]);
}
La consola debería mostrar todos los objetos de la matriz, ¿verdad? Pero en realidad sólo muestra el primer objeto. Si registro en la consola la matriz fuera del bucle, aparecen todos los objetos, por lo que definitivamente hay más allí.
De todos modos, aquí está el siguiente problema. ¿Cómo accedo, por ejemplo, a Object1.x en la matriz, usando el bucle?
for (var j = 0; j < myArray.length; j++){
console.log(myArray[j.x]);
}
Esto devuelve "indefinido". Nuevamente, el registro de la consola fuera del bucle me dice que todos los objetos tienen valores para "x". ¿Cómo accedo a estas propiedades en el bucle?
En otro lugar me recomendaron usar matrices separadas para cada una de las propiedades, pero primero quiero asegurarme de haber agotado esta vía.
¡Gracias!
Utilice forEach para que sea una función de matriz incorporada. Array.forEach()
:
yourArray.forEach(function (arrayItem) {
var x = arrayItem.prop1 + 2;
console.log(x);
});
Algunos casos de uso de bucle a través de una matriz en la forma de programación funcional en JavaScript:
1. Simplemente recorra una matriz
const myArray = [{x:100}, {x:200}, {x:300}];
myArray.forEach((element, index, array) => {
console.log(element.x); // 100, 200, 300
console.log(index); // 0, 1, 2
console.log(array); // same myArray object 3 times
});
Nota: Array.prototype.forEach() no es una forma funcional estrictamente hablando, ya que se supone que la función que toma como parámetro de entrada no devuelve un valor, por lo que no puede considerarse como una función pura.
2. Compruebe si alguno de los elementos de una matriz pasa una prueba.
const people = [
{name: 'John', age: 23},
{name: 'Andrew', age: 3},
{name: 'Peter', age: 8},
{name: 'Hanna', age: 14},
{name: 'Adam', age: 37}];
const anyAdult = people.some(person => person.age >= 18);
console.log(anyAdult); // true
3. Transformar a una nueva matriz
const myArray = [{x:100}, {x:200}, {x:300}];
const newArray= myArray.map(element => element.x);
console.log(newArray); // [100, 200, 300]
Nota: El método map() crea una nueva matriz con los resultados de llamar a una función proporcionada en cada elemento de la matriz que llama.
4. Resuma una propiedad particular y calcule su promedio.
const myArray = [{x:100}, {x:200}, {x:300}];
const sum = myArray.map(element => element.x).reduce((a, b) => a + b, 0);
console.log(sum); // 600 = 0 + 100 + 200 + 300
const average = sum / myArray.length;
console.log(average); // 200
5. Crea un nuevo array basado en el original pero sin modificarlo
const myArray = [{x:100}, {x:200}, {x:300}];
const newArray= myArray.map(element => {
return {
...element,
x: element.x * 2
};
});
console.log(myArray); // [100, 200, 300]
console.log(newArray); // [200, 400, 600]
6. Cuente el número de cada categoría.
const people = [
{name: 'John', group: 'A'},
{name: 'Andrew', group: 'C'},
{name: 'Peter', group: 'A'},
{name: 'James', group: 'B'},
{name: 'Hanna', group: 'A'},
{name: 'Adam', group: 'B'}];
const groupInfo = people.reduce((groups, person) => {
const {A = 0, B = 0, C = 0} = groups;
if (person.group === 'A') {
return {...groups, A: A + 1};
} else if (person.group === 'B') {
return {...groups, B: B + 1};
} else {
return {...groups, C: C + 1};
}
}, {});
console.log(groupInfo); // {A: 3, C: 1, B: 2}
7. Recuperar un subconjunto de una matriz según criterios particulares
const myArray = [{x:100}, {x:200}, {x:300}];
const newArray = myArray.filter(element => element.x > 250);
console.log(newArray); // [{x:300}]
Nota: El método filter() crea una nueva matriz con todos los elementos que pasan la prueba implementada por la función proporcionada.
8. Ordenar una matriz
const people = [
{ name: "John", age: 21 },
{ name: "Peter", age: 31 },
{ name: "Andrew", age: 29 },
{ name: "Thomas", age: 25 }
];
let sortByAge = people.sort(function (p1, p2) {
return p1.age - p2.age;
});
console.log(sortByAge);
9. Encuentra un elemento en una matriz.
const people = [ {name: "john", age:23},
{name: "john", age:43},
{name: "jim", age:101},
{name: "bob", age:67} ];
const john = people.find(person => person.name === 'john');
console.log(john);
El método Array.prototype.find() devuelve el valor del primer elemento de la matriz que satisface la función de prueba proporcionada.
Referencias
- matriz.prototipo.algunos()
- matriz.prototipo.forEach()
- matriz.prototipo.map()
- matriz.prototipo.filtro()
- matriz.prototipo.sort()
- Sintaxis extendida
- matriz.prototipo.find()