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

193
Vistas
Javascript: modifica el objeto y agrega un nuevo índice a una propiedad

Mi objeto es algo como:

 let items = [ { "creationTimeStamp": "2022-05-31T17:04:28.000Z", "modifiedTimeStamp": "2022-05-31T17:04:28.000Z", "locations": [ { "id": "5ao", "name": "Store1" } ], "typeId": "Lead" } ]

Estoy tratando de insertar el siguiente objeto en la propiedad de locations :

 { "id": "9a0", "name": "Store2" }

he intentado hacer

 items1 = []; for (var i = 0; i < items.length; i++) { items1.id = "9a0"; items1.name = "Store2"; //9 is some static index value added Object.assign({9 : items1}, items[i].locations); }

Si me console(Object.assign({9 : items1}, items[i].locations)); Puedo ver 2 matrices dentro de él, pero la propiedad de locations de mis elementos sigue siendo la misma.

Mi expectativa es la siguiente:

 [ { "creationTimeStamp": "2022-05-31T17:04:28.000Z", "modifiedTimeStamp": "2022-05-31T17:04:28.000Z", "locations": [ { "id": "5ao", "name": "Store1" }, { "id": "9a0", "name": "Store2" } ], "typeId": "Lead" } ]

También intenté usar items[i].locations.push(item1) pero luego obtuve:

TypeError: no se puede agregar la propiedad 9, el objeto no es extensible

También traté de asignar una nueva matriz a items[i].locations , pero luego obtuve:

TypeError: no se puede asignar a la propiedad de solo lectura 'ubicaciones' del objeto '#'

¿Qué puedo hacer para obtener el resultado deseado?

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Parece esperar que el segundo argumento dado a Object.assign sea mutado. Pero es el primer argumento el que está mutado. Eso significa que sus .locations no están mutadas. Además, en los comentarios, indica que locations no se pueden ampliar y que la propiedad es de solo lectura.

Eso significa que necesitará un objeto completamente nuevo.

Algunas otras observaciones:

  • No inicialice items1 como una matriz, ya que se supone que es un objeto simple.

  • Declare una variable con const , let o var y evite la declaración global implícita.

  • Es más seguro declarar el objeto items1 dentro del bucle, por lo que crea un nuevo objeto cada vez y no muta el mismo objeto. Para su código de ejemplo, no hace ninguna diferencia, pero puede provocar un comportamiento inesperado.

  • Como no necesita i para nada más que items[i] , y en realidad necesita una estructura completamente nueva, use .map en su lugar.

Asi que:

 items = items.map(item => { let obj = { id: "9a0", name: "Store2" }; return {...item, locations: item.locations.concat(obj) }; });
about 4 years ago · Juan Pablo Isaza Denunciar

0

Siempre pienso en términos de funciones y de inmutabilidad predeterminada, por lo que mi enfoque podría verse así, con addLocationToAll construido sobre un addLocation más simple. El código es bastante simple:

 const addLocation = (newLoc) => ({locations, ...rest}) => ({...rest, locations: locations .concat (newLoc)}) const addLocationToAll = (newLoc) => (items) => items .map (addLocation (newLoc)) const items = [{creationTimeStamp: "2022-05-31T17:04:28.000Z", modifiedTimeStamp: "2022-05-31T17:04:28.000Z", locations: [{id: "5ao", name: "Store1"}], typeId:"Lead"}] const newLoc = {id: "9a0", name: "Store2"} console .log (addLocationToAll (newLoc) (items))
 .as-console-wrapper {max-height: 100% !important; top: 0}

about 4 years ago · Juan Pablo Isaza Denunciar

0

items es una matriz por lo que debe acceder a la primera posición de la matriz, que sería el objeto propuesto. Con esto, del objeto propuesto, extraerá el atributo de location y, como se trata de una matriz, utilizará la función de inserción para insertar el nuevo objeto.

 items[0] // -> // { // creationTimeStamp: '2022-05-31T17:04:28.000Z', // modifiedTimeStamp: '2022-05-31T17:04:28.000Z', // locations: [ { id: '5ao', name: 'Store1' } ], // typeId: 'Lead' // }

Intento esto:

 items[0].locations.push({"id": "9a0", "name": "Store2" })

Y ahora:

 items[0] //-> // { // creationTimeStamp: '2022-05-31T17:04:28.000Z', // modifiedTimeStamp: '2022-05-31T17:04:28.000Z', // locations: [ { id: '5ao', name: 'Store1' }, { id: '9a0', name: 'Store2' }], // typeId: 'Lead' // }
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