Cómo recorrer una matriz que contiene objetos y acceder a sus propiedades

Resuelto FlyingLizard asked hace 11 años • 19 respuestas

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!

FlyingLizard avatar May 18 '13 23:05 FlyingLizard
Aceptado

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);
});
Dory Zidon avatar May 18 '2013 16:05 Dory Zidon

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);

ingrese la descripción de la imagen aquí

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);

ingrese la descripción de la imagen aquí

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()
Yuci avatar Feb 21 '2018 22:02 Yuci