Я пытаюсь создать canvasJS, гистограммы JavaScript со следующими функциями:
var dataPoints = [];
var headers;
var groups = [];
var cityWide = 0;
var chart = createChart();
function createChart(title = "Hospitalized Count") {
return new CanvasJS.Chart("chartContainer", {
animationEnabled: true,
title:{
text:"Coronavirus Data in NYC Boroughs"
},
axisX:{
interval: 1
},
axisY2:{
interlacedColor: "rgba(1,77,101,.2)",
gridColor: "rgba(1,77,101,.1)",
title: "Total number of "+title
},
data: [{
type: "bar",
name: "companies",
axisYType: "secondary",
color: "#014D65",
dataPoints: dataPoints
}]
});
}
Я использую эту функцию ниже, чтобы установить массив dataPoints:
вызов функции: dataPoints = setDataPoints(4)
function setDataPoints(value){
let temp = [];
for(var i = 0; i<groups.length;i++){
if (groups[i][0] == "Citywide"){
continue;
}
yValue = groups[i][value];
myLabel = groups[i][0];
console.info("y: "+ yValue);
console.info("label: "+ myLabel);
temp.push(
{
y: yValue,
label: myLabel
});
}
console.info(temp);
return temp;
}
Но когда я console.info (dataPoints), я получаю следующее:
[
{"y": "136319","label": "Bronx","x": 0},
{"y": "202778","label": "Brooklyn","x": 1},
{"y": "97006","label": "Manhattan","x": 2},
{"y": "202737","label": "Queens","x": 3},
{"y": "54479","label": "StatenIsland","x": 4}
]
ожидаемый результат для dataPoints должен быть следующим:
[
{y:136319, label: "Bronx" },
{y:202778, label: "Brooklyn" },
{y:97006, label: "Manhattan" },
{y:202737, label: "Queens" },
{y:54479, label: "StatenIsland" }|
]
Когда я пытался установить x
temp.push(
{
x: "123",
y: yValue,
label: myLabel
});
или удалите temp [i] ['x'], это не сработает.
Как вы могли заметить, значение x - это индексы массива, я понятия не имею, почему оно установлено и как мне его вообще удалить.
я пытался
dataPoints = temp;
console.info(dataPoints[0].hasOwnProperty('x'));
и возвращает false
Любая помощь будет признательна за это заранее!
ИЗМЕНИТЬ на основе комментария:
в цикле:
console.info(temp[i]['x']) возвращает undefined
Если я добавлю в temp.push ({x: "123", ...})
console.info(temp[i]['x']) возвращает 123
console.info (temp [i]):
{y: "54479", label: "StatenIsland"}
label: "StatenIsland"
x: 4
y: "54479"
__proto__: Object
function.js:98
К сожалению, удалил предыдущий комментарий, который был console.info (temp [i]) без X, обновил сообщение с результатами; console.info(temp[i]["x"] returns undefined
Следует ли доверять тому, что передается в вашу функцию ... то есть value выводится правильно?
да, в настоящее время установлено значение 4 в качестве заполнителя в другой функции, в которой функция вызывается.
Похоже, вы могли бы вынуть все, что ниже dataPoints = temp (поместить их после вызова функции для setDataPoints), и просто сразу вернуть temp вместо dataPoints.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я не знаком с CanvasJS, но предполагаю, что он изменяет массив dataPoints, который вы даете ему, чтобы заполнить координату «x» на диаграмме. console.info не запускается синхронно, поэтому к тому времени, когда вы видите вывод, он уже изменен.
Если у вас console.info([...dataPoints]) или console.info([...temp]), держу пари, что x там не будет.
Согласно Документация по API для dataPoints.x:
If not provided, it will be set automatically set according to its index position on dataPoints Array.
Если вы хотите сохранить свою «чистую» копию dataPoints, вам необходимо передать копию массива на график [...dataPoints].
console.info ([... dataPoints]) или console.info ([... temp]) по-прежнему дает мне значение x = \, к сожалению, значение x не позволяет мне нарисовать диаграмму, надеялся найти способ избавиться от него, я немного отсылаюсь к документации (попробуйте проголосовать, если в документе есть решение)
так что ... когда вы
console.info(temp[i]["x"]), вы получаете?