数组的一些与遍历相关的方法总结

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()即可。

猜你喜欢

转载自www.cnblogs.com/zhengxj1991/p/9100470.html