JavaScript中数组的22种方法必学(推荐)(5)

var arr = ['a','b','c','d','e','a','b']; console.log(arr.lastIndexOf('b'));//6 console.log(arr.lastIndexOf('b',undefined));//-1 console.log(arr.lastIndexOf('a',undefined));//0 console.log(arr.lastIndexOf('b',NaN));//-1 console.log(arr.lastIndexOf('b',1));//1 console.log(arr.lastIndexOf('b',-1));//max(0,-1+7)=6; 6 console.log(arr.lastIndexOf('b',-5));//max(0,-5+7)=2; 1 console.log(arr.lastIndexOf('b',-50));//max(0,-50+7)=0; -1

  【tips】返回满足条件的项的所有索引值

  可以通过循环调用indexOf()或lastIndexOf()来找到所有匹配的项

function allIndexOf(array,value){ var result = []; var pos = array.indexOf(value); if(pos === -1){ return -1; } while(pos > -1){ result.push(pos); pos = array.indexOf(value,pos+1); } return result; } var array = [1,2,3,3,2,1]; console.log(allIndexOf(array,1));//[0,5]

  lastIndexOf()方法兼容写法

if (typeof Array.prototype.lastIndexOf != "function") { Array.prototype.lastIndexOf = function (searchElement, fromIndex) { var index = -1, length = this.length; fromIndex = fromIndex * 1 || length - 1; for (var k = length - 1; k > -1; k-=1) { if (k <= fromIndex && this[k] === searchElement) { index = k; break; } } return index; }; }

数组归并方法

  数组归并方法包括reduce()和reduceRight()方法两种,它们使用指定的函数将数组元素进行组合,生成单个值。这在函数式编程中是常见的操作,也可以称为“注入”和“折叠”

【reduce()】

  reduce()方法需要两个参数。第一个是执行化简操作的函数。化简函数的任务就是用某种方法把两个值组合或化简为一个值,并返回化简后的值

  化简函数接受四个参数,分别是:

  【1】初始变量,默认为数组的第一个元素值。函数第一次执行后的返回值作为函数第二次执行的初始变量,依次类推

  【2】当前变量,如果指定了第二个参数,则该变量为数组的第一个元素的值,否则,为第二个元素的值

  【3】当前变量对应的元素在数组中的索引(从0开始)

  【4】原数组对象

  化简函数的这四个参数之中,只有前两个是必须的,后两个则是可选的

values.reduce(function(prev, cur, index, array){ //todo });

  reduce()方法第二个(可选)的参数是一个传递给函数的初始值

var a = [1,2,3,4,5]; var sum = a.reduce(function(x,y){return x+y},0);//数组求和 var product = a.reduce(function(x,y){return x*y},1);//数组求积 var max = a.reduce(function(x,y){return (x>y)?x:y;});//求最大值 [1, 2, 3, 4, 5].reduce(function(prev, cur){ console.log(prev, cur) return prev+ cur; }); // 1 2 // 3 3 // 6 4 // 10 5 //最后结果:15 [1, 2, 3, 4, 5].reduce(function(prev, cur){ console.log(prev, cur); return prev + cur; },0); // 0 1 // 1 2 // 3 3 // 6 4 // 10 5 //最后结果:15

  [注意]reduce()方法的返回结果类型和传入的初始值相同

[1, 2, 3, 4, 5].reduce(function(prev, cur){ console.log(prev.sum, cur); prev.sum = prev.sum + cur; return prev; },{sum:0}); //0 1 //1 2 //3 3 //6 4 //10 5 //Object {sum: 15}

  利用reduce()方法,可以写一个数组求和的sum方法

Array.prototype.sum = function (){ return this.reduce(function (prev, cur){ return prev + cur; }) }; [3,4,5,6,10].sum();// 28

  由于reduce方法依次处理每个元素,所以实际上还可以用它来搜索某个元素。比如,找出长度最长的数组元素

function findLongest(entries) { return entries.reduce(function (prev, cur) { return cur.length > prev.length ? cur : prev; }, ''); } console.log(findLongest([1,2,3,'ab',4,'bcd',5,6785,4]));//'bcd'

  可以利用reduce()方法,实现二维数组的扁平化

var matrix = [ [1, 2], [3, 4], [5, 6] ]; // 二维数组扁平化 var flatten = matrix.reduce(function (prev, cur) { return prev.concat(cur); }); console.log(flatten); // [1, 2, 3, 4, 5, 6]

  在空数组上,不带初始值参数调用reduce()将导致类型错误异常。如果调用它的时候只有一个值——数组只有一个元素并且没有指定初始值,或者有一个空数组并且指定一个初始值——reduce()只是简单地返回那个值而不会调用化简函数

var arr = []; arr.reduce(function(){});//Uncaught TypeError: Reduce of empty array with no initial value var arr = []; arr.reduce(function(){},1);//1

  reduce()方法兼容写法

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wzsyzz.html