Нет времени? Сразу к делу!
1,forEach
иmap
Аналогичные функции могут быть реализованы
2,forEach
,map
,filter
может изменить исходный массив
3.forEach
нет возвращаемого значения,map
имеет возвращаемое значение,filter
имеет возвращаемое значение
forEach
forEach()
Метод выполняет предоставленную функцию один раз для каждого элемента массива.
грамматика:
array.forEach(callback(currentVal, index, array) {
// do something
}, thisArg)
forEach Инструкция по применению
1,forEach
Метод выполняется один раз для каждого элемента в массиве, который имеет допустимое значение в порядке возрастания.callback
функции, удаленные (используяdelete
методы и т. д.) или неинициализированные элементы будут пропущены (но не те, значение которыхundefined
элементы) (например, в разреженных массивах).
2. Если даноforEach
прошедшийthisArg
параметры, при вызове они будут переданы вcallback
функцию, поскольку ееthis
ценность. В противном случае он будет передан вwindow
как егоthis
ценность.callback
Функция, наконец, наблюдаемаthis
значение, в зависимости от наблюдаемой функцииthis
общие правила.
о JavaScriptthis
, я думаю, что это слишком важно, чтобы внимательно прочитать:никогда с .GitHub.IO/2018/06/01/…
3.forEach
Пересечение диапазона при первом вызовеcallback
будет определено раньше. перечислитьforEach
Предметы, добавленные позже на массив, не будутcallback
доступ к. Если существующее значение было изменено, передаетсяcallback
ЗначениеforEach
Перейдите к их значению в данный момент. Удаленные элементы не просматриваются. Если посещенный элемент удаляется во время итерации (например, с помощьюshift()
), элементы после этого будут пропущены.
4.forEach()
выполнить для каждого элемента массиваcallback
функция; в отличие отmap()
илиreduce()
, он всегда возвращаетсяundefined
значения и не могут быть объединены в цепочку. Типичный вариант использования — выполнение побочных эффектов в конце цепочки.
forEach суть
1. Нет возвращаемого значения
var arr1 = [1, 2, 3, 4, 5]
var solt = arr1.forEach((v,i,t) => {
console.log(v)
})
console.log(solt) // undefined
2. Невозможно прервать или выйти из цикла forEach
var arr1 = [1, 2, 3, 4, 5]
// 使用break会报错
arr1.forEach((v,i,arr) => {
console.log(v)
if(v === 3) {
break
}
})
// return false 也无效
arr1.forEach((v,i,arr) => {
console.log(v)
if(v === 3) {
console.log('-----')
return false
}
})
// 1
// 2
// 3
// -----
// 4
// 5
3. Используйте функции стрелок,thisArg
параметры игнорируются
var arr1 = [1, 2, 3]
var arr2 = [7, 8, 9]
arr1.forEach((v, i, arr) => {
console.log(this)
})
// window
// window
// window
arr1.forEach((v, i, arr) => {
console.log(this)
}, arr2)
// window
// window
// window
4.forEach()
не создает копию массива перед итерациейЕсли массив изменяется во время итерации, другие элементы пропускаются.
var words = ["one", "two", "three", "four"];
words.forEach(function(word) {
console.log(word);
if (word === "two") {
words.shift();
}
});
// one
// two
// four
При достижении содержащего значения"two"
, удаляется первый элемент всего массива, в результате чего все оставшиеся элементы перемещаются на одну позицию вверх. потому что элемент"four"
Теперь в более ранней позиции в массиве"three"
будет пропущен.forEach()
Копия массива не создается до итерации.
5. Измените исходный массив
var arr1 = [1, 2, 3]
var arr2 = [7, 8, 9]
arr1.forEach(function(v, i, arr) {
console.log(this)
arr[i] = v * 2
}, arr2)
console.log(arr1)
// (3) [7, 8, 9]
// (3) [7, 8, 9]
// (3) [7, 8, 9]
// (3) [2, 4, 6]
arr1 изменен с [1, 2, 3] на [2, 4, 6]внутри функцииthis
значениеarr2
map
map()
метод создает массив, результат которого является результатом вызова предоставленной функции для каждого элемента в массиве
грамматика:
let new_array = arr.map(function(v, i, arr) {
// Return element for new_array
}[, thisArg])
возвращаемое значение:
一个新数组,每个元素都是回调函数的结果
инструкции карты
1,map
Не изменяет исходный массив, для которого он был вызван (конечно, исходный массив может быть изменен при выполнении обратного вызова).
2. ЕслиthisArg
Параметр имеет значение каждый разcallback
Когда функция вызывается,this
укажет наthisArg
Этот объект по параметру. если опущеноthisArg
параметр или назначается какnull
илиundefined
,ноthis
Указывает на глобальный объект.
3.map
Метод будет вызываться один раз для каждого элемента в исходном массиве по порядку.callback
функция.callback
Возвращаемое значение после каждого выполнения (включаяundefined
) объединяются в новый массив.callback
Функции вызываются только для индексов, которые имеют значения; они никогда не присваиваются и не используются.delete
Удаленные индексы не вызываются.
4. Используйтеmap
Когда метод обрабатывает массив, диапазон элементов массива находится вcallback
Метод определяется перед первым вызовом. существуетmap
Во время выполнения метода: вновь добавленные элементы в исходном массиве не будутcallback
Доступ к; если существующие элементы были изменены или удалены, они передаются вcallback
Значениеmap
Метод переходит к их значению в данный момент, удаленный элемент не будет доступен. 【иforEach
Такой же】
суть карты
1,querySelectorAll
применение
var elems = document.querySelectorAll('select option:checked');
var values = Array.prototype.map.call(elems, function(obj) {
return obj.value
});
Приведенный выше код показывает, как пройти черезquerySelectorAl
Результирующая коллекция динамических объектов. Здесь мы получаем все проверенные параметры в документе и распечатываем его.
советы по использованию карты
как правило,map
в методеcallback
Функция должна принимать только один параметр, который является проходимым элементом массива. но это не значитmap
только датьcallback
Параметр передается. Такое мышление может привести нас к простой ошибке.
// 下面的语句返回什么呢:
["1", "2", "3"].map(parseInt);
// 你可能觉得会是 [1, 2, 3]
// 但实际的结果是 [1, NaN, NaN]
обычно используетсяparseInt
, необходимо передать только один параметр.
Но на самом деле,parseInt
Аргументов может быть два, второй аргумент — это базовое число.
через заявлениеalert(parseInt.length) === 2
проверять.map
метод вызываетcallback
При вызове функции ей будут переданы три параметра: просматриваемый в данный момент элемент, индекс элемента и сам исходный массив.
третий параметрparseInt
будет проигнорирован, а второй параметр - нет, то есть:parseInt
Используйте переданное значение индекса в качестве базового числа. Это возвращает NaN.
Или вы можете использовать функции стрелок:
['1', '2', '3'].map( str => {
parseInt(str)
})
Более простой способ:
['1', '2', '3'].map(Number); // [1, 2, 3]
// 与 parseInt 不同,下面的结果会返回浮点数或指数:
['1.1', '2.2e2', '3e300'].map(Number); // [1.1, 220, 3e+300]
filter
filter()
метод создает новый массив, содержащий все элементы теста, реализованного предоставленной функцией
грамматика:
var new_array = arr.filter(callback[, thisArg])
фильтр Инструкции
1,filter
Вызывается один раз для каждого элемента массиваcallback
функции и использует всеcallback
возвращениеtrue
илизначение эквивалентно истинномусоздает новый массив элементов.callback
Он будет вызываться только для индексов, которые были назначены, и не будет вызываться для индексов, которые были удалены или никогда не назначались. те, кто не прошелcallback
Проверяемые элементы пропускаются и не включаются в новый массив.
2,filter
Он не изменяет исходный массив, он возвращает новый отфильтрованный массив.
3.filter
Итерация по диапазону элементов в первом вызовеcallback
Это было определено ранее. вызовfilter
Элементы, добавленные в массив позже, не будутfilter
пройти к. Если существующие элементы были изменены, они переходят вcallback
Значениеfilter
Перейдите к их значению на данный момент. Элементы, которые удалены или которым никогда не присваивалось значение, не просматриваются.
пример фильтра
var filtered = [12, 5, 8, 130, 44].filter(function(v) {
return v >= 10
})
// [12, 130, 44]
напиши в конце
моя домашняя страница:neveryu.github.io/index.html
Группа QQ:685486827