数组方法

160 阅读3分钟

sort:会改变原始数组

默认按照升序排列数组项,sort()会调用每个数组的toString()转型方法,然后比较得到的字符串例如:

var values = [0,1,5,10,15]
values.sort()
console.log(values) // [0,1,10,15,5]

因此sort可以接受一个比较函数,该函数接受两个参数,比较两个参数,如果第一个参数应该位于第二个参数之前则返回一个负数,如果两个参数相等,则返回0,如果第一个参数应该位于第二个参数之后应该返回一个正数。但在实际业务中,我们一般这样取用:

 const list = [
 {id:1,title:"1"},
 {id:3,title:"3"},
 {id:5,title:"5"},
 {id:4,title:"4"},
 {id:2,title:"2"},
 ]
 //希望按照id进行升序,
 list.sort((a,b)=>a.id - b.id)
 //希望按照id降序
 .sort((a,b)=>b.id - a.id)

concat - 不会改变原始数组

这个方法会先创建当前数组的副本,然后将接受到的参数添加到该副本的末尾,最后返回新构造的数组 如果传入的是一个或者多个数组,那么会将这些数组中的每一项都添加到结果数组中,如果传入的不是数组,这些值就会简单的添加到数组的末尾。总结:参数并不是只能传入一个数组,而是可以是其他类型的值,并且多个,也可以混合,即:

const arr = [1,2,3,4]
const result = arr.concat("string",[4,5,6],{a:1})
console.log(result) // [1, 2, 3, 4, 'string', 4, 5, 6, {a:1}]

slice - 不会改变原始数组

作用,基于当前数组一个或者多个项创建一个新数组,参数,一个或者两个 一个参数:slice(index) 从索引为index到数组的末尾 两个参数:slice(start,end) 从索引start开始,到end,但是不包含end

splice - 会改变原数组

作用:删除,插入,替换

删除:传递两个参数,要删除的起始位置,和要删除的项数 splice(0,2)就是删除数组的前两项,splice(5,1)就是删除数组的索引为5的哪一项。

插入: 传递三个或者三个以上的参数,起始位置,0(要删除的项数),和要插入的项,如果要插入多个可以在后面传入四五六。。。例如:splice(2,0,"red","yellow").

替换: 跟可以向指定的位置插入任意数量的项,传入三个参数,起始位置,要删除的项数,要插入任意数量的项,插入的项目不必与删除的项数相等,例如,splice(2,1,'red','yellow'),就是删除索引为2的哪一项,然后在索引为2的位置插入”red“,"yellow"

返回值是一个数组:返回从数组中删除的项,如果没有删除任何项则返回一个空数组。

reduce 不会改变原始数组

Array.prototype._reduce = function (fn, initVal) {
  if (typeof initVal === "undefined") {
    initVal = this[0];
    for (let i = 1; i < this.length; i++) {
      initVal = fn(initVal, this[i], i, this);
    }
  } else {
    for (let i = 0; i < this.length; i++) {
      initVal = fn(initVal, this[i], i, this);
    }
  }
  return initVal;
};

reduceRight:

和reduce用法一样区别在于从哪头开始遍历。