Cómo mapear más de una propiedad de una matriz de objetos

2 minutos de lectura

avatar de usuario
usuario144271

Tengo una matriz de objetos de la siguiente manera:

var obj = [
  {a: 1, b: 5, c: 9},
  {a: 2, b: 6, c: 10},
  {a: 3, b: 7, c: 11},
  {a: 4, b: 8, c: 12}
];

Sé cómo obtener un solo objeto usando Array.map() Me gusta esto.

var result = obj.map(x=>x.a)

Esto me dará el siguiente resultado.

[1, 2, 3, 4]

Pero quiero un resultado como el siguiente:

[
  {a: 1, b: 5},
  {a: 2, b: 6},
  {a: 3, b: 7},
  {a: 4, b: 8}
]

En resumen, de una matriz de objetos, quiero seleccionar solo algunos campos (más de uno).

¿Cómo puedo hacer eso?

  • crear un nuevo bucle para filtrar la matriz con elementos seleccionados

    – Azad

    11 de diciembre de 2018 a las 6:56

Puedes usar .map() con Destrucción de objetos:

let data = [
    {a:1,b:5,c:9}, {a:2,b:6,c:10},
    {a:3,b:7,c:11}, {a:4,b:8,c:12}
];
          
let result = data.map(({ a, b }) => ({a, b}));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Usar map():

var data = [
  {a:1,b:5,c:9},
  {a:2,b:6,c:10},
  {a:3,b:7,c:11},
  {a:4,b:8,c:12}
];
          
let modified = data.map(obj => ({a: obj.a, b: obj.b}))

console.log(modified);

O si prefieres desestructurar:

var data = [
    {a:1,b:5,c:9}, 
    {a:2,b:6,c:10},
    {a:3,b:7,c:11}, 
    {a:4,b:8,c:12}
];
          
let modified = data.map(({ a, b }) => ({a, b}));

console.log(modified);

avatar de usuario
Prasad Telkikar

Puede devolver un objeto personalizado con las propiedades requeridas usando map()

var obj = [{a:1,b:5,c:9},
           {a:2,b:6,c:10},
           {a:3,b:7,c:11},
           {a:4,b:8,c:12}
          ];
          
          
let op = obj.map(e => {
   return { a:e.a, b: e.b };
})        

console.log(op);

avatar de usuario
twhb

En su solución para producir [1,2,3,4], x.a no es una micro-sintaxis, en realidad es una expresión completa de JavaScript. Entonces puede reemplazarlo con JavaScript para crear un nuevo objeto con las propiedades que desea.

var result = obj.map(x=>{a: x.a, b: x.b});

… casi. La complicación adicional es que un { después de => se interpreta como el comienzo del cuerpo de una función, no como el comienzo de un objeto literal. Puede evitar esto simplemente envolviendo el objeto literal en paréntesis de otra manera noop.

var result = obj.map(x=>({a: x.a, b: x.b}));

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad