Два массива в один многомерный массив — Javascript

#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 ) .