Array.prototypr.every():为数组中的每一个元素执行一次callback函数,直到它找到一个使callback返回false的元素。
如果找到一个这样的元素,every方法会立即返回false,否则会为每一个元素返回true,every也会返回true。callback被调用时传入三个参数:元素值,元素的索引,原数组。callback只会为那些已经被赋值的索引调用,不会为那些被删除或从来没被赋值的索引调用。every不会改变原数组。空数组返回true。
语法:arr.every(callback[, thisArg])
function isBigEnough(element, index, array) { return (element >= 10); } var passed = [12, 5, 8, 130, 44].every(isBigEnough); // passed is false passed = [12, 54, 18, 130, 44].every(isBigEnough); // passed is true
Array.prototype.filter():创建一个新数组,其包含通过所提供函数实现的测试的所有元素。
语法:var new_array = arr.filter(callback[, thisArg])
function isBigEnough(value) { return value >= 10; } var filtered = [12, 5, 8, 130, 44].filter(isBigEnough); // filtered is [12, 130, 44] // ES6 way const isBigEnough = value => value >= 10; let [...spread]= [12, 5, 8, 130, 44]; let filtered = spread.filter(isBigEnough); // filtered is [12, 130, 44]
filter为数组中的每个元素调用一次callback函数,并利用所有使得callback返回true或等价于true的值的元素创建一个新数组。callback只会在已经赋值的索引上被调用,对于那些已经被删除或者从来未被赋值的索引不会被调用。那些没有通过callback测试的元素会被跳过,不会包含在新数组中。filter 不会改变原数组,它返回过滤后的新数组。
Array.prototype.forEach():对数组的每个元素执行一次提供的函数。该方法没有返回一个新数组,也没有返回值!
语法:
array.forEach(callback(currentValue, index, array){ //do something }, this)
//或
array.forEach(callback[, thisArg])
Eg:
const arr = ['a', 'b', 'c']; arr.forEach(function(element) { console.log(element); }); arr.forEach( element => console.log(element)); // a // b // c
forEach方法按升序为数组中含有效值的每一项执行一次callback函数,那些已删除或者未初始化的项将被跳过(但不包含值为undefined的项)。没有办法终止或跳出forEach循环,除了抛出一个异常。
如果数组在迭代时被修改了,则其它元素会被跳过:
var words = ["one", "two", "three", "four"]; words.forEach(function(word) { console.log(word); console.log(words); if (word === "two") { words.shift(); } }); // one // ["one", "two", "three", "four"] // two // ["one", "two", "three", "four"] // four // ["two", "three", "four"] //"one"被删除后,后面的元素向前移动一位,"three"移到"two"的位置上,而"two"位置已经被迭代过了,所以会跳过"three"。
Array.prototype.map():创建一个新数组,其结果是该数组中的每个元素都调用一个函数后返回的结果。
语法:
let new_array = arr.map(function callback(currentValue, index, array) { // Return element for new_array }[, thisArg])
Eg:
// ES6 let numbers = [1, 5, 10, 15]; let doubles = numbers.map( x => x ** 2); // doubles is now [1, 25, 100, 225] // numbers is still [1, 5, 10, 15] let numbers = [1, 4, 9]; let roots = numbers.map(Math.sqrt); // roots is now [1, 2, 3] // numbers is still [1, 4, 9]
map方法会给原数组中的每个元素都按顺序调用一次callback函数。callback每次执行后的返回值(包括undefined)组合起来形成一个新数组。callback函数只会在有值的索引上被调用,那些从来没被赋过值或者使用delete删除的索引则不会被调用。
Array.prototype.reduce():reduce()方法对累加器和数组中的每个元素(从左到右)应用一个函数,将其减少为单个值。
var sum = [0, 1, 2, 3].reduce(function (a, b) { return a + b; }, 0); // sum is 6
//ES6 var total = [ 0, 1, 2, 3 ].reduce( ( acc, cur ) => acc + cur, 0 );
Array.prototype.some():some() 方法测试数组中的某些元素是否通过由提供的函数实现的测试。
some 为数组中的每一个元素执行一次 callback 函数,直到找到一个使得 callback 返回一个“真值”(即可转换为布尔值 true 的值)。如果找到了这样一个值,some 将会立即返回 true。否则,some 返回 false。callback 只会在那些”有值“的索引上被调用,不会在那些被删除或从来未被赋值的索引上调用。与Array.prototypr.every()是相对的,参考Array.prototypr.every()即可。