Программно изменить другой ключ в объекте - PullRequest
0 голосов
/ 04 июня 2019

Я пытаюсь подготовить свои данные для Chart.js, поэтому мне приходится программно менять ключ объекта. Я обнаружил, что эта жестко закодированная версия работает. `

fetch('http://...)
        .then (results =>{
            return results.json();
        }).then(data => {
            console.log(data);


        var utplockadData = {
            datasets: [
            ]
        };


        for(var i=1; i<Object.keys(data[0][0]).length; i++){
            utplockadData.datasets[i] = {label: Object.keys(data[0][0])[i], data: [], pointRadius: 1 ,fill: false, borderColor: "black"};
        }
        console.log(utplockadData);



        for (var i=1; i<data[0].length; i++){
            utplockadData.datasets[1].data[i] = {x: data[0][i].timestamp, y: data[0][i].airTemperature};
            utplockadData.datasets[2].data[i] = {x: data[0][i].timestamp, y: data[0][i].heaterTemperature};
        }
        console.log(utplockadData);
})

Ожидаемый результат:

datasets: Array(3)
1:
borderColor: "black"
data: Array(1441)
[1 … 100]
1: {x: "2019-05-01 00:01:00", y: 4.2}
2: {x: "2019-05-01 00:02:09", y: 4.1}
3: {x: "2019-05-01 00:03:00", y: 4.1}
4: {x: "2019-05-01 00:04:09", y: 4.1}...

Но если я добавлю массив с адресами к ключам и изменим цикл, как здесь:

var enArray = [data[0][i].airTemperature, data[0][i].heaterTemperature];

for (var i=1; i<data[0].length; i++){
            utplockadData.datasets[1].data[i] = {x: data[0][i].timestamp, y: enArray[0]};
            utplockadData.datasets[2].data[i] = {x: data[0][i].timestamp, y: enArray[1]};

}

В результате все ключи имеют одинаковое значение:

Не ожидаемый результат:

datasets: Array(3)
1:
borderColor: "black"
data: Array(1441)
[1 … 100]
1: {x: "2019-05-01 00:01:00", y: 4.1}
2: {x: "2019-05-01 00:02:09", y: 4.1}
3: {x: "2019-05-01 00:03:00", y: 4.1}
4: {x: "2019-05-01 00:04:09", y: 4.1}
5: {x: "2019-05-01 00:05:00", y: 4.1}
6: {x: "2019-05-01 00:06:00", y: 4.1}
7: {x: "2019-05-01 00:07:00", y: 4.1}...

Я не знаю, что здесь происходит. Как я могу получить доступ к значениям airTength и нагревателя, не добавляя их все в цикл for?

UPDATE: Добавление примера данных из бэкэнда.

[

    [
        {timestamp: '2019-05-01 01:38:00',
            airTemperature: 3.5,
            heaterTemperature: 2.6 },

        {timestamp: '2019-05-01 01:39:00',
            airTemperature: 3.5,
            heaterTemperature: 2.6 },
    ],

        "text"

]

1 Ответ

1 голос
/ 04 июня 2019

Похоже, ваш enArray - это не то, о чем вы думаете ...

var enArray = [data[0][i].airTemperature, data[0][i].heaterTemperature];

Поскольку i - это одно значение, ваш enArray будет представлять собой один плоский массив с двумя значениями,то есть [4.1, 4.2].Они используются снова и снова в вашем новом цикле.

Если у вас по-прежнему возникают проблемы, я предлагаю вернуться к простейшему примеру, который вы можете создать как кодовое перо или подобное.Уже одно это, вероятно, приведет вас к решению, но если нет, то гораздо больше шансов, что кто-то еще сможет помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...