Работая в JavaScript, у меня есть два массива, которые мне нужно объединить для создания конкатенации всех их элементов, например:
var array1 = ["A", "B", "C"];
var array2 = ["1", "2", "3"];
resultado = ["A1", "A2", "A3", "B1", "B2", "B3", "C1", "C2", "C3"];
Для этого я могу придумать 3 разных метода: использование классического цикла for
, использование метода forEach
или использование метода map
следующими способами:
за
var array1 = ["A", "B", "C"];
var array2 = ["1", "2", "3"];
var resultado = [];
for(var x = 0; x < array1.length; x++) {
for (var y = 0; y < array2.length; y++) {
resultado.push(array1[x] + array2[y]);
};
};
console.log(resultado);
для каждого
var array1 = ["A", "B", "C"];
var array2 = ["1", "2", "3"];
var resultado = [];
array1.forEach(function(valor1) {
array2.forEach(function(valor2) {
resultado.push(valor1 + valor2);
});
});
console.log(resultado);
карта
var array1 = ["A", "B", "C"];
var array2 = ["1", "2", "3"];
var resultado = [];
array1.map(function(valor1) {
array2.map(function(valor2) {
resultado.push(valor1 + valor2);
});
});
console.log(resultado);
Все три метода проходят через оба массива, и со всеми тремя я получаю один и тот же результат (как вы можете видеть в приведенных выше примерах). Теперь мои вопросы:
- Каковы преимущества/недостатки каждого метода?
- Есть ли один, который следует использовать над другими или в зависимости от ситуации?
- Есть ли метод, который делает что-то подобное и лучше (например, более эффективный или быстрый)
Это довольно общий вопрос. Классический
for
и самый современныйforEach
в основном одинаковы. По сути,forEach
он родился как более современная альтернатива классическомуfor
(как и в большинстве языков). Использованиеfor
более разумно для выполнения заданного количества итераций, аforEach
для обхода коллекций. Преимущество вfor
том, что он довольно быстрый по сравнению сforEach
(хотя этот не медленный).Ответ всегда зависит. Как я сказал в предыдущем пункте,
for
иforEach
хотя они могут использоваться для одних и тех же вещей, последний в основном предназначен для обхода коллекций (отсюда и его название).Map
, с другой стороны, предназначен для перебора коллекции, но с целью обработки этой коллекции для возврата из нее новой. Этот алгоритм работает одинаково в таких языках, как Java.Чтобы ответить на этот вопрос, мы можем сделать небольшой тест, сравнивая различные структуры:
тест производительности
Этот простой тест производительности дает интересные результаты. Кажется ,
map
он быстрее, чем Gecko , чем Webkit со значительной разницей.forEach
Выводы
Последние версии Firefox , Chrome и Edge возвращают следующее:
Map
это быстрее,Gecko
чем во всех двигателях.for
Это самая быстрая структура из всех.for in
это самая медленная структура из всех.forEach
быстрее, чемmap
вWebkit
иChakra
.Chakra
Это самый длинный прием среди двигателей.for of
занимает примерно столько же времени, сколькоforEach
.Очевидно, что эти результаты могут различаться между версиями движков/браузеров, но я думаю, что результаты радикальны между ними.