Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

165
Vistas
¿Cómo recorrer una matriz de objetos y agregar una nueva clave de objeto según la condición en JavaScript?

Tengo la siguiente matriz de objetos:

 [{"id":0,"name":"Katy","age":22}, {"id":2,"name":"Lucy","age":12}, {"id":1,"name":"Jenna","age":45}, {"id":3,"name":"Ellie","age":34}]

Necesito agregar otra clave a los objetos ( PaymentCategory ) donde el objeto que tenga la ID más baja se agrega la clave con el valor "Efectivo", el que tiene la ID más alta "Tarjeta" y todo lo demás entre "Cheque"; la matriz también debe ordenarse por ID.

Por lo tanto, la salida requerida sería:

 [{"PaymentCategory":"Cash","id":0,"name":"Katy","age":22}, {"Payment Category":"Cheque","id":1,"name":"Jenna","age":45}, {"Payment Category":"Cheque","id":2,"name":"Lucy","age":12}, {"Payment Category":"Card","id":3,"name":"Ellie","age":34}]

¿Cómo podemos lograr este resultado de la manera más eficiente, es decir, con el menor número de iteraciones y el mayor rendimiento?

Esto es lo que probé:

 const min = array.reduce((prev,curr)=> prev.id<curr.id?prev:curr) const max = array.reduce((prev,curr)=> prev.id>curr.id?prev:curr) min.PaymentCategory = "Cash" max.PaymentCategory = "Credit" const result =[min, max]

El problema con esto es:

  1. Lo estoy recorriendo dos veces, uno para max , uno para min .
  2. ¿Cómo obtengo los valores "medios"?
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

El siguiente enfoque proporcionado es sencillo y primero sort los elementos de una copia de matriz superficial ( [...sampleData] ) en orden ascendente ( .sort((a, b) => a.id - b.id) ) de valores id .

La tarea final map cada artículo (ordenado) de una manera que crea una copia superficial ( { ...item } ) y además crea una entrada 'Payment Category' donde al primer artículo ( idx === 0 ) se le asigna el Valor 'Cash' , al último artículo ( (idx === arr.length - 1) ) se le asigna el valor 'Card' , y a todos los demás se les asigna el valor 'Cheque' .

El enfoque completo no muta los datos proporcionados originalmente...

 const sampleData = [ { id: 0, name: "Katy", age: 22 }, { id: 2, name: "Lucy", age: 12 }, { id: 1, name: "Jenna", age: 45 }, { id: 3, name: "Ellie", age: 34 }, ]; console.log( 'mapped `sampleData` items ...', [...sampleData] .sort((a, b) => a.id - b.id) .map((item, idx, arr) => ({ ...item, 'Payment Category': ((idx === 0) && 'Cash') || ((idx === arr.length - 1) && 'Card') || 'Cheque', })) ); console.log('unmutated `sampleData` ...', sampleData);
 .as-console-wrapper { min-height: 100%!important; top: 0; }

El enfoque anterior de una manera aún más legible ...

 const copyItemAndAugmentPaymentCategory = (item, idx, arr) => ({ ...item, 'Payment Category': ((idx === 0) && 'Cash') || ((idx === arr.length - 1) && 'Card') || 'Cheque', }); const compareItemIdPrecedenceAscending = (a, b) => a.id - b.id; console.log( [ { id: 0, name: "Katy", age: 22 }, { id: 2, name: "Lucy", age: 12 }, { id: 1, name: "Jenna", age: 45 }, { id: 3, name: "Ellie", age: 34 }, ] .sort(compareItemIdPrecedenceAscending) .map(copyItemAndAugmentPaymentCategory) );
 .as-console-wrapper { min-height: 100%!important; top: 0; }

about 4 years ago · Juan Pablo Isaza Denunciar

0

puedes hacer esto

 const array =[{"id":0,"name":"Katy","age":22}, {"id":2,"name":"Lucy","age":12}, {"id":1,"name":"Jenna","age":45}, {"id":3,"name":"Ellie","age":34}] const arrayLength= array.length const newA=array.map( (element,index) => { if (index===0) return {"PaymentCategory":"Cash", ...element} else if ( index===arrayLength-1 )return {"PaymentCategory":"Card", ...element} else return {"PaymentCategory":"Cheque", ...element}})

verifique el método de mapa en matrices para obtener más información: https://learnjsx.com/category/2/posts/es6-mapFunction

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda