Supongamos que tengo un objeto como este (es una configuración js de gráfico).
const radarChartData = { labels: [3, 4, 6, 7, 8, 8], data: [0, 0, 0, 0, 0, 0], bgArr: this.labels.map((label, i) => label === 10 ? "red" : "blue"); // An error has occurred, because this code can't access its own labels in radarChartData. datasets: [{.....}] } const radarChartConfig = { type: ...., } const radarChart = new Chart(radarChartCtx, radarChartConfig)Intenté la siguiente solución, pero todo falló...
bgArr: radarChartData.labels.map((label, i) => label === 10 ? "red" : "blue");¿Cómo acceder a su propiedad? En primer lugar, no es una buena opción para acceder a él y de esta manera?
No puede hacer referencia a un objeto durante la inicialización cuando usa la sintaxis literal de objeto. Debe hacer referencia al objeto después de crearlo. La única forma de hacer referencia a un objeto durante la inicialización es cuando usa una función de constructor.
Este ejemplo utiliza una función anónima como constructor. El nuevo objeto es referencia con este
const data = new (function () { (this.labels = [3, 4, 6, 7, 8, 8]), (this.data = [0, 0, 0, 0, 0, 0]), (this.bgArr = this.labels.map((label, i) => label === 10 ? "red" : "blue" )); })(); const radarChartData = { labels: data.labels, data: data.data, bgArr: data.labels.map((label, i) => (label === 10 ? "red" : "blue")), }; console.log(radarChartData); /** * LOGS * { * labels: [ 3, 4, 6, 7, 8, 8 ], * data: [ 0, 0, 0, 0, 0, 0 ], * bgArr: [ 'blue', 'blue', 'blue', 'blue', 'blue', 'blue' ] * } */