#javascript #arrays #multidimensional-array
#javascript #массивы #многомерный массив
Вопрос:
У меня есть два одномерных массива — каждый одинаковой длины; temperature
и seconds
. Чтобы создать точечный график, мне нужен он в виде;
var data = [
[temperature[100],seconds[100]],
[temperature[99],seconds[99]],
[temperature[98],seconds[98]],
...
];
Кажется, я не могу понять, как это сделать, и, похоже, я задаю неправильные вопросы в Google.
Комментарии:
1. в следующий раз ищите «zip javascript arrays»
Ответ №1:
Выполните обратный цикл по массивам и создайте новые массивы из каждой пары элементов:
var data = [];
for (var i = temperature.length - 1; i >= 0 ; i--) {
data.push([ temperature[i], seconds[i] ]);
}
Комментарии:
1. Зачем здесь выполнять цикл в обратном направлении? Разве вы не изменяете размер массива каждый раз, используя push?
2. @Triptych: Потому что последние элементы массива
temperature
иseconds
должны быть первыми.3. @Triptych: я решил выполнить цикл в обратном направлении, потому что в результате данные отображаются в обратном направлении. Использование
push
несколько медленнее, но это упрощает код здесь. Вы можете ускорить процесс, создав массив с конечным размером и установив элементы с использованием индекса вместо использованияpush
, но существенной разницы нет. Массивы работают немного по-разному в разных браузерах, например, в Firefox, это вообще не имеет никакого значения, если вы создаете массив с конечным размером или создаете пустой массив и позволяете ему расти.4. @Guffa — Я пропустил очевидную причину — то, что она была отменена в выводе OP. Хорошая информация о поведении push, спасибо =). И я должен был сказать «-потенциально- изменение размера массива»
5. @Triptych Спасибо за это 🙂 Массив использовался в точечном графике, поэтому порядок в конечном итоге оказался неважным (тогда как когда я отслеживал только строку, это было). Тем не менее, отлично сработал!
Ответ №2:
Я думаю, что это решение вашей проблемы, хотя и не протестировано.
data = [];
for(var i = 0, len = temperature.lengh - 1;i < len; i ){
data[i] = [temperature[len - i] , seconds[len - i]];
}
Комментарии:
1. Я думаю, что в строке внутри цикла
[len - i]
индексы должны быть[len - i - 1]
, потому что последний элемент в массиве имеет индекс, равный длине минус 1. Либо это, либо измените инициализацию цикла и условие:for(var i=0; len=temperature.length-1; i<=len; i )
.