Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

208
Visualizações
¿Cómo actualizar el objeto en función del valor específico de los objetos?

Tengo 2 objetos y quiero 'trasplantar' valores de un objeto al otro.

El primer objeto del que estoy extrayendo datos se ve así:

 var userData = { Data: [ { Amount: 430140.68, Year: "2015", AccountName: "Account 1" }, { Amount: 458997.32, Year: "2016", Name: "Account 2" }, ] }

El segundo objeto en el que estoy colocando datos se ve así:

 [ { "name": "Account 1", "data": [ 0, 0 ], }, { "name": "Account 2", "data": [ 0, 0 ], } ]

Mi objetivo es tomar la Amount del primer objeto y colocarlo en la matriz de data del segundo. Cada año corresponde a un valor en la matriz 'datos'.

Entonces, el objeto actualizado resultante debería verse así:

 [ { "name": "Account 1", "data": [ 430140.68, 0 ], }, { "name": "Account 2", "data": [ 0, 458997.32 ], } ]

Para intentar lograr esto tengo el siguiente código:

 const yearArrLength = yearsArr.length; const generatedObj = new Array(yearArrLength).fill(0); // Push name and populate data array with 0s. for (var key of Object.keys(userData.Data)) { var accName = userData.Data[key].AccountName; if (!generatedObj.find(key => key.name === accName)){ generatedObj.push({'name': accName, 'data': blankDataArr}); } } for (var key of Object.keys(userData.Data)) { var accName = userData.Data[key].AccountName; var accAmount = userData.Data[key].Amount; var accYear = userData.Data[key].Year; // Get location of years array value var yearArrIndex = yearsArr.indexOf(accYear); for (var key of Object.keys(generatedObj)) { if (generatedObj[key].name == accName) { generatedObj[key].data[yearArrIndex] = accAmount; } } }

Sin embargo, esto parece llenar todos los valores de la matriz de datos, por ejemplo:

 [ { "name": "Account 1", "data": [ 430140.68, 458997.32 ], }, { "name": "Account 2", "data": [ 430140.68, 458997.32 ], } ]

Estoy completamente perplejo en cuanto a por qué. La declaración if debería verificar si hay un nombre de cuenta coincidente, pero no parece activarse.

¿Alguien sabría que he hecho mal?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Parece que está presionando exactamente el mismo blankDataArr cada vez: no está presionando una nueva matriz, está presionando la misma matriz para todos.

Para un ejemplo más mínimo:

 const subarr = []; const arr = [subarr, subarr]; arr[0].push('x'); console.log(JSON.stringify(arr)); // both items in `arr` have changed // because both refer to the exact same subarr object

Para lo que está tratando de hacer, parece que sería mucho más fácil hacer un objeto o mapa indexado por AccountName primero, de esa manera solo tiene que acceder o crear la propiedad AccountName mientras itera, y asignar a la apropiada año.

 const yearsArr = ['2015', '2016']; const userData = { Data: [ { Amount: 430140.68, Year: "2015", AccountName: "Account 1" }, { Amount: 458997.32, Year: "2016", AccountName: "Account 2" }, ] }; const dataByAccountName = new Map(); for (const { AccountName, Amount, Year } of userData.Data) { if (!dataByAccountName.has(AccountName)) { // Create an entirely new array: dataByAccountName.set(AccountName, yearsArr.map(() => 0)); } const index = yearsArr.indexOf(Year); dataByAccountName.get(AccountName)[index] = Amount; } const result = [...dataByAccountName.entries()].map(([name, data]) => ({ name, data })); console.log(result);

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda