Ваш код и исходный код делают совершенно разные вещи.
Предполагая, что sheets
содержит объекты, которые возвращают имена "sheet1"
, "sheet2"
и "sheet3"
из getName
,Исходный код создает массив, который выглядит следующим образом:
[
(missing),
["sheet1"],
["sheet2"],
["sheet3"]
]
Обратите внимание на две вещи:
- Нет записи с индексом 0. (Буквально не существует вообще,который слегка отличается от существующего и содержит значение
undefined
.) - Другие записи являются одноэлементными массивами , каждая из которых содержит имя листа.
Вместо этого ваш код создает это:
[
"sheet1",
"sheet2",
"sheet3"
]
Предположительно, у автора была причина пропустить индекс 0 и создать подчиненные массивы (я думаю, они передавали этот массив результатов в некоторыеAPI-функция, которая ожидает что-то в этой форме).
Так что на самом деле здесь нет «лучше» или «хуже», просто другое.
Если ваш фундаментальный вопрос таков:
var original = ["one", "two", "three"];
var updated = [];
for (var i = 0; i < original.length; ++i) {
updated[i] = original[i].toUpperCase(); // Or whatever
}
лучше / хуже, чем это:
var original = ["one", "two", "three"];
var updated = [];
for (var i = 0; i < original.length; ++i) {
updated.push(original[i].toUpperCase()); // Or whatever
}
ответ: это действительно вопрос стиля.Производительность между этими двумя компонентами не сильно различается (и редко имеет значение), и забавно, что один способ работает быстрее на некоторых механизмах JavaScript, а другой - быстрее на других.
Оба из них, вероятно, лучше выразить с помощью map
:
var original = ["one", "two", "three"];
var updated = original.map(function(entry) { return entry.toUpperCase(); });
Я думаю, что Google Sheets имеет map
, хотя в большинстве случаев он имеет только функции уровня ES3.
Примечание: new Array
почтиникогда не правильный способ создать массив.