Единственная разница, которую я вижу в карте и foreach, является этим map
возвращает массив и forEach
не. Однако я даже не понимаю последнюю строку forEach
метод"func.call(scope, this[i], i, this);
". Например, не"this
"и"scope
"обращение к тому же объекту и не this[i]
и i
обращение к текущему значению в цикле?
Я заметил на другом сообщении, кто-то сказал "Использование forEach
когда Вы хотите сделать что-то на основе каждого элемента списка. Вы могли бы добавлять вещи к странице, например. По существу замечательно для того, когда Вы хотите "побочные эффекты". Я не знаю то, что предназначено побочными эффектами.
Array.prototype.map = function(fnc) {
var a = new Array(this.length);
for (var i = 0; i < this.length; i++) {
a[i] = fnc(this[i]);
}
return a;
}
Array.prototype.forEach = function(func, scope) {
scope = scope || this;
for (var i = 0, l = this.length; i < l; i++) {
func.call(scope, this[i], i, this);
}
}
Наконец, есть ли любое реальное использование для этих методов в JavaScript (так как мы не обновляем базу данных) кроме управлять числами как это:
alert([1,2,3,4].map(function(x){ return x + 1})); //this is the only example I ever see of map in javascript.
Спасибо за любой ответ.
Существенная разница между map
и forEach
в вашем примере заключается в том, что forEach
работает с исходными элементами массива, тогда как map
в результате явно возвращает новый массив.
С помощью forEach
вы выполняете некоторые действия с каждым элементом исходного массива и при необходимости изменяете его. Метод forEach
запускает функцию, которую вы предоставляете для каждого элемента, но ничего не возвращает ( undefined
). С другой стороны, map
проходит по массиву, применяет функцию к каждому элементу, а выдает результат в виде нового массива .
«Побочным эффектом» forEach
является то, что исходный массив изменяется. «Отсутствие побочного эффекта» с map
означает, что при идиоматическом использовании исходные элементы массива не изменяются; новый массив - это взаимно-однозначное сопоставление каждого элемента в исходном массиве - преобразование сопоставления является вашей предоставленной функцией.
Тот факт, что здесь нет базы данных, не означает, что вам не придется работать со структурами данных, что, в конце концов, является одной из сущностей программирования на любом языке. Что касается вашего последнего вопроса, ваш массив может содержать не только числа, но и объекты, строки, функции и т. Д.
Вы можете использовать карту
, как если бы это была forEach
.
Однако он сделает больше, чем должен.
область видимости
может быть произвольным объектом; это ни в коем случае не обязательно это
.
Что касается реального использования map
и forEach
, а также спросить, есть ли реальное использование для для
или , в то время как
петли.