У меня есть цикл, который перебирает массив данных plotData
.Из plotData
я строю другой массив с именем visiblePoints
.Затем я зацикливаюсь на visiblePoints
для создания объекта thisRow
, затем добавляю thisRow
к массиву вне цикла, который называется dataArray
:
var dataArray = []
for (i = 0; i < plotData.length; i++) {
// This filters datapoints array into another array
var visiblePoints = filterPoints(plotData[i].datapoints)
// Get the string for the thisRow object key name
var selectedParameter = plotData[i].label
for (k = 0; k < visiblePoints.length; k++) {
// Convert visiblePoint first value from ms to date
var timestamp = new Date(visiblePoints[k][0])
// Form the thisRow object that will go into dataArray
// for each loop of visiblePoints
var thisRow = {}
thisRow["Time"] = msToTime(timestamp)
thisRow[selectedParameter] = visiblePoints[k][1]
dataArray.push(thisRow)
}
}
Давайте упростим и скажем, что у меня есть только2 элемента в подмассиве visisblePoints
для каждого plotData
массива, вот так (каждый массив plotData
может иметь много visiblePoints
, но я упрощаю только до 2 для каждого):
plotData[0].visiblePoints = [[00:00:01, 1], [00:00:02, 4] ...]
plotData[1].visiblePoints = [[00:00:01, 27], [00:00:02, 31] ...]
plotData
выглядит на консоли следующим образом:
Массив visiblePoints
для цикла k
получен из plotData.datapoints
ивыглядит так:
Где visiblePoints[n][0]
- это значение в мс (которое я конвертирую в секунды), а visiblePoints[n][1]
- просто значение с плавающей запятой.
visiblePoints =
[0, 0.0500466109191]
[100, 0.0548114598135]
[200, 0.0550143573252]
[300, 0.0549408536766]
[400, 0.0546117305419]
[... repeat 300+ times...]
После зацикливания plotData[i]
и visiblePoints[k]
я получаю:
dataArray = [
{
"Time": 00:00:01,
"foo": 1
},
{
"Time": 00:00:01,
"bar": 27
},
{
"Time": 00:00:02,
"foo": 4
},
{
"Time": 00:00:02,
"bar": 31
},
]
Когда я хотел закончить с:
dataArray = [
{
"Time": 00:00:01,
"foo": 1,
"bar": 27
},
{
"Time": 00:00:02,
"foo": 4,
"bar": 31
}
]
Я думаю, что в цикле k
Мне нужно перейти на dataArray
, проверить все объекты там, чтобы увидеть, есть ли ключ Time
, который соответствует thisRow["Time"] = msToTime(timestamp)
, и если так, добавьте thisRow[selectedParameter] = visiblePoints[k][1]
к этому, если нет, создайте новый объект.
Проблемы:
- I 'я не уверен, как это проверить в JS (у меня больше опыта работы с Python, и не очень)
- Кажется, я делаю кучу циклов.Я не уверен, что добавление еще одного, чтобы просмотреть весь
dataArray
и проверить все объекты, чтобы увидеть, существует ли ключ в одном из них, является лучшим решением здесь.Массив plotData.visiblePoints
может быть длиной 500+.
[EDIT] Упрощенный вопрос.Добавлены примеры картинок.Добавлены текстовые примеры массива k
.