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

140
Vistas
Insertar árbol de objetos en matriz/objeto por valor

Quiero usar chart.js

La estructura no está completa, pero esto no importa, creo. Y tengo una estructura prototipo para yAxes. Estos deben insertarse 3x en chartDef.options.scales.yAxes pero POR VALOR para que pueda cambiar las tres partes de forma independiente. y se debe insertar el ID. Pero haciendo como en mi código, las tres partes se cambian al mismo (último) número.

Para mí, parece agregar por valor / por problema de referencia.

¿Cómo puedo resolver?

Gracias

 var yaxes_prototype ={ ticks: { autoSkip: true, maxTicksLimit: 20, min: -1, max: 1, stepSize: 0.2 } } var chartDef = { type: 'line', data: { datasets: [] }, options: { responsive: true, showTooltips: true, hoverMode: 'index', stacked: false, scales: { xAxes: [], yAxes: [] }, } } console.log("yaxes_prototype",yaxes_prototype) for (var i=0 ; i<3 ; i++){ //##### OK, but BY REFERENCE chartDef.options.scales.yAxes.push(yaxes_prototype); // OK ,insert as newobject chartDef.options.scales.yAxes[i]["id"]=i // key,:val was added, but all val the same } console.log("chartDef",chartDef.options.scales)
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

El problema es que envías el yaxes_prototype exactamente igual tres veces.

Este fragmento a continuación puede ayudarlo a ver si el obj1 enviado como parámetro se recibe exactamente en el mismo objeto (por referencia), que si cambia alguno de ellos, todo cambiará.

 var obj1 = {name: "foo", value: "bar"}; (function() { if ( typeof Object.prototype.uniqueId == "undefined" ) { var id = 0; Object.prototype.uniqueId = function() { if ( typeof this.__uniqueid == "undefined" ) { this.__uniqueid = ++id; } return this.__uniqueid; }; } })(); function printId(obj) { console.log(obj.uniqueId()); } for(var i=0; i<3; i++) printId(obj1);

Por lo tanto, debe copiar eso y volver a enviarlo como una variable/objeto diferente en el bucle:

 var yaxes_prototype ={ ticks: { autoSkip: true, maxTicksLimit: 20, min: -1, max: 1, stepSize: 0.2 } } console.log("yaxes_prototype",yaxes_prototype) for (var i=0 ; i<3 ; i++){ var copyObj = {...yaxes_prototype}; // This copies the value stored in yaxes_prototype chartDef.options.scales.yAxes.push(copyObj); // OK ,insert as newobject chartDef.options.scales.yAxes[i]["id"]=i // key,:val was added, but all val the same }

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