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用法一样区别在于从哪头开始遍历。