Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

185
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!