会改变自身的方法有9种:
1.copyWithin():浅复制数组的一部分到同一数组的另外一个位置,并返回它,不会改变原数组的长度
2.fill():用一个固定值填充一个数组中从起始索引到结束索引内的所有元素,但不包括结束索引,并返回该数组,不会改变原数组的长度
3.pop():从数组中删除最后一个元素,并返回该元素的值。此方法更改数组的长度
4.shift():从数组中删除第一个元素,并返回该元素的值。此方法更改数组的长度
5.push():在数组的末尾增长一个或多个元素,并返回数组的新长度
6.unshift():在数组的开头增长一个或多个元素,并返回数组的新长度
7.splice():在任意的位置给数组添加或删除任意个元素
8.sort():对数组元素进行排序,并返回当前数组
9.reverse():将数组中元素的位置颠倒,并返回该数组。该方法会改变原数组
1.copyWithin():浅复制数组的一部分到同一数组的另外一个位置,并返回它,不会改变原数组的长度
/**
* 方法:copyWithin
* 做用:浅复制数组的一部分到同一数组的另外一个位置,并返回它,不会改变原数组的长度
* 语法:arr.copyWitin(target[, start[, end]])
* arr.copyWitin(target)
* arr.copyWitin(target, start)
* arr.copyWitin(target, start, end)
* arr.copyWitin(目标索引, 起始索引, 结束索引)
* 参数:
* target 目标索引
* 0 为基底的索引,复制序列到该位置。
* 若是是负数,target 将从末尾开始计算。
* 若是 target 大于或等于 arr.length,将会不发生。
* 若是 target 在 start 以后,复制的序列将修改以符合 arr.length。
*
* start 起始索引
* 0 为基底的索引,开始复制元素的起始位置。
* 若是是负数,start 将从末尾开始计算。
* 若是 start 被忽略,copyWithin 将会从0开始复制。
*
* end 结束索引
* 0 为基地的索引,开始复制元素的结束位置。copyWithin 将会拷贝到该位置,但不包括 end 这个位置的元素。
* 若是是负数,end 将从末尾开始计算。
* 若是 end 被忽略,copyWithin 方法将会一直复制至值数组结尾(默认为arr.length)
* 返回值:改变后的数组
* 描述:
* 参数target、start、end 必须是整数
* 若是start为负,则其指定索引值等同于length+start,length为数组的长度。end也是如此
**/
var arr = [1,2,3,4,5]
// 取索引为0到结尾的数据(start/end的索引不填,意味着从索引0开始找/找到数组结尾),从末尾开始计算的第3个开始替换
console.log(arr.copyWithin(-3))
[1, 2, 1, 2, 3]
var arr = [1,2,3,4,5]
// 取索引为3到结尾的数据(end的索引不填,意味着找到数组结尾),从索引0开始替换
console.log(arr.copyWithin(0, 3))
//[4, 5, 3, 4, 5]
var arr = [1,2,3,4,5]
// 取索引为3到4的数据,不包括索引4的数据,从索引0开始替换
console.log(arr.copyWithin(0, 3, 4))
//[4, 2, 3, 4, 5]
var arr = [1,2,3,4,5]
// 取从末尾开始计算的第3个到第1个,不包括从末尾开始的第1个,从末尾开始计算的第2个开始替换
console.log(arr.copyWithin(-2, -3, -1))
//[1,2,3,3,4]
var arr = [1,2,3,4,5]
// 取索引为1到3的数据,不包括索引3的数据,从索引2开始替换
console.log(arr.copyWithin(2, 1, 3))
//[1,2,2,3,5]
2.fill():用一个固定值填充一个数组中从起始索引到结束索引内的所有元素,但不包括结束索引,并返回该数组,不会改变原数组的长度
/**
* 方法:fill
* 做用:用一个固定值填充一个数组中从起始索引到结束索引内的所有元素,但不包括结束索引,并返回该数组,不会改变原数组的长度
* 语法:arr.fill(value[,start[,end]])
* arr.fill(value)
* arr.fill(value, start)
* arr.fill(value, start, end)
* arr.fill(填充数组的值, 起始索引, 结束索引)
* 参数:
* value 用来填充数组的值
* start 起始索引,默认值为0
* end 结束索引,默认值为this.length
* 返回值:修改后的数组
* 描述:
* fill方法接受的三个参数value,start,end,起始start,end是可选的,其默认值分别为0,this.length
* 若是start为负,则其指定索引值等同于length+start,length为数组的长度。end也是如此
* */
var arr = [1,2,3,4,5]
// 用4替换从索引0到结尾的值
console.log(arr.fill(4))
//[4,4,4,4,4]
var arr = [1,2,3,4,5]
// 用4替换从索引1到结尾的值
console.log(arr.fill(4, 1))
//[1,4,4,4,4]
var arr = [1,2,3,4,5]
// 用4替换从索引1到3的值,不包括索引3的值
console.log(arr.fill(4, 1, 3))
//[1,4,4,4,5]
var arr = [1,2,3,4,5]
// 用4替换从索引2到3的值,不包括索引3的值
arr.length = 5 => 5 + (-3) = 2 => 5 + (-2) = 3
console.log(arr.fill(4, -3, -2))
//[1,2,4,4,5]
3.pop():从数组中删除最后一个元素,并返回该元素的值。此方法更改数组的长度
/**
* 方法:pop
* 做用:从数组中删除最后一个元素,并返回该元素的值。此方法更改数组的长度
* 语法:arr.pop()
* 参数:不须要传参
* 返回值:
* 从数组中删除的元素
* 若是数组为空则返回undefined
* 描述:
* pop方法从数组中删除并返回最后一个元素
* 若是空数组调用pop方法,返回undefined
* */
var arr = [1,2,3,4,5]
// 从arr中删除并返回最后一个元素,原数组长度改变
console.log(arr.pop())
console.log(arr)
//5
//[1,2,3,4]
4.shift():从数组中删除第一个元素,并返回该元素的值。此方法更改数组的长度
/**
* 方法:shift
* 做用:从数组中删除第一个元素,并返回该元素的值。此方法更改数组的长度
* 语法:arr.shift()
* 参数:不须要传参
* 返回值:
* 从数组中删除的元素
* 若是数组为空则返回undefined
* 描述:
* pop方法从数组中删除并返回最后一个元素
* 若是空数组调用pop方法,返回undefined
* */
var arr = [1,2,3,4,5]
// 从arr中删除并返回第一个元素,原数组长度改变
console.log(arr.shift())
console.log(arr)
//1
//[2,3,4,5]
5.push():在数组的末尾增长一个或多个元素,并返回数组的新长度
/**
* 方法:push
* 做用:在数组的末尾增长一个或多个元素,并返回数组的新长度
* 语法:arr.push(element1,...,elementN)
* 参数:被添加到数组末尾的元素
* 返回值:
* 返回新的length属性值,即返回新的数组长度
* 描述:
* push 方法降值追加到数组中
* */
// 添加元素
var arr = [1,2,3,4,5]
// 把6追加到arr中,并返回arr的长度
console.log(arr.push(6))
console.log(arr)
//6
// [1,2,3,4,5,6]
// 添加数组
var arr = [1,2,3,4,5]
var arrNew = [6,7,8]
// 把arrNew追加到arr中,并返回arr的长度
console.log(arr.push.apply(arr,arrNew))
console.log(arr)
//8
//[1,2,3,4,5,6,7,8]
6.unshift():在数组的开头增长一个或多个元素,并返回数组的新长度
/**
* 方法:unshift
* 做用:在数组的开头增长一个或多个元素,并返回数组的新长度
* 语法:arr.unshift(element1,...,elementN)
* 参数:被添加到数组开头的元素
* 返回值:
* 返回新的length属性值,即返回新的数组长度
* 描述:
* unshift 方法将值插到数组开始位置
* */
// 添加元素
var arr = [1,2,3,4,5]
// 把6追加到arr中,并返回arr的长度
console.log(arr.push(6))
console.log(arr)
//6
// [1,2,3,4,5,6]
// 添加数组
var arr = [1,2,3,4,5]
var arrNew = [6,7,8]
// 把arrNew追加到arr中,并返回arr的长度
console.log(Array.prototype.push.apply(arr,arrNew))
console.log(arr)
// 8
//[1,2,3,4,5,6,7,8]
7.splice():在任意的位置给数组添加或删除任意个元素
/**
* 方法:splice
* 做用:在任意的位置给数组添加或删除任意个元素
* 语法:array.splice(start[, deleteCount[, item1[, item2[, ...]]]])
* 参数:
* start 指定修改的开始位置
* 若是超出了数组的长度,则从数组末尾开始添加内容
* 若是是负值,则表示从数组末位开始的第几位(从-1 计数,这意味着-n是倒数而且等价于array.length-n)
* 若是负数的绝对值大于数组的长度,则表示开始位置为第0位
*
* deleteCount 整数,表示要移除的数组元素的个数
* 若是 deleteCount 大于start以后的元素的总数,则从start后面元素都将被删除(含第start位)
* 若是 deleteCount 被省略了,或者它的值大于等于array.length - start(也就是说,若是他大于
* 或等于以后的全部元素的数量),那么start以后数组的全部元素都会被删除
* 若是 deleteCount 是0或者负数,则不移动元素。这种状况下,至少应该天啊及一个新元素
*
* item1,item2,item3,..可选
* 要添加进数组的元素,从start位置开始。
* 若是不指定,则splice() 将只删除数组元素
* 返回值:
* 由被删除的元素组成的一个数组。
* 若是只删除了一个元素,则返回只包含一个元素的数组。
* 若是没有删除,则返回空数组
* 描述:
* 若是添加进数组的元素个数不等于被删除的元素个数,数组的长度会发生相应的改变
*
* */
var arr = [1,2,3,4,5]
// 从第2位开始删除0个元素,插入6
console.log(arr.splice(2, 0, 6))
console.log(arr)
// 没有删除,则返回空数组
// [1,2,6,3,4,5,6]
var arr = [1,2,3,4,5]
// 从第2位开始删除0个元素,插入6,7,8
console.log(arr.splice(2, 0, 6, 7, 8))
console.log(arr)
// 8
// [1,2,6,7,8,3,4,5]
var arr = [1,2,3,4,5]
// 从第2位开始删除2个元素
console.log(arr.splice(arr.length - 3, 2))
console.log(arr)
// [3,4]
// [1,2,5]
var arr = [1,2,3,4,5]
// 从倒数第2位开始删除2个元素
// 意味着 arr.length + (-n)
console.log(arr.splice(-2, 2))
console.log(arr)
// [3,4]
// [1,2,5]
var arr = [1,2,3,4,5]
// 从倒数第2位开始删除2个元素
console.log(arr.splice(2))
console.log(arr)
// [3,4]
// [1,2,5]
var arr = [1,2,3,4,5]
// 从第1位开始删除全部元素
console.log(arr.splice(0))
console.log(arr)
// [1,2,3,4,5]
// []
var arr = [1,2,3,4,5]
// 不删除元素
console.log(arr.splice())
console.log(arr)
// []
// [1,2,3,4,5]
var arr = [1,2,3]
console.log(arr.length)
// 从第一位开始删除2个元素,添加4,5,6,7
console.log(arr.splice(0,2,4,5,6,7))
console.log(arr.length)
// 3
// [1,2]
// 5
8.sort():对数组元素进行排序,并返回当前数组
/**
* 方法:sort
* 做用:对数组元素进行排序,并返回当前数组
* 语法:arr.sort([compareFunction])
* 参数:
* compareFunction 用指定按某种顺序进行排列的函数
* 若是省略,元素按照转换的字符串的各个字符的Unicode位点进行排序
*
* firstEl 第一个用于比较的元素
*
* secondEl 第二个用于比较的元素
* 返回值:排序后的数组。请注意,数组已原地排序,而且不进行复制
* 描述:
* 若是不指明 compareFunction,那么元素会按照转换为的字符串的各个字符的Unicode位点进行排序
*
*
* 若是指明了 compareFunction,那么数组会按照调用函数的返回值排序。即a和b是两个将要
* 比较的元素:
* - compareFunction(a,b) > 0 => a 在 b 前面
* - compareFunction(a,b) = 0 => a 和 b 位置不变
* - compareFunction(a,b) < 0 => b 在 a 前面
*
* compareFunction(a,b) 必须老是对相同的输入返回相同的比较结果,不然排序的结果是不肯定
*
* */
var arr = [4,2,5,1,3]
// 升序
arr.sort(function(a,b){
return a - b;
})
console.log(arr)
// [1,2,3,4,5]
var arr = [4,2,5,1,3]
// 升序
// ES6 写法
arr.sort((a,b) => a - b)
console.log(arr)
// [1,2,3,4,5]
var arr = [4,2,5,1,3]
// 降序
arr.sort(function(a,b){
return b - a;
})
console.log(arr)
// [5,4,3,2,1]
// 对象能够按照某个属性排序
var items = [
{ name: 'Edward', value: 21 },
{ name: 'Sharpe', value: 37 },
{ name: 'And', value: 45 },
{ name: 'The', value: -12 },
{ name: 'Magnetic' },
{ name: 'Zeros', value: 37 }
];
items.sort((a,b) => a.value - b.value)
console.log(items)
// [{name: "The", value: -12},
// {name: "Edward", value: 21},
// {name: "Sharpe", value: 37},
// {name: "And", value: 45},
// {name: "Magnetic"},
// {name: "Zeros", value: 37}]
9.reverse():将数组中元素的位置颠倒,并返回该数组。该方法会改变原数组
/**
* 方法:reverse
* 做用:将数组中元素的位置颠倒,并返回该数组。该方法会改变原数组
* 语法:arr.reverse()
* 参数:不须要传参
* 返回值:颠倒后的数组
* 描述:
* reverse方法颠倒数组中元素的位置,改变了数组,并返回改数组的引用
* */
// 颠倒数组中的元素
var arr = [4,2,5,1,3]
console.log(arr)
arr.reverse()
console.log(arr)
// [1,2,3,4,5]
// [3,1,5,2,4]
// 颠倒类数组中的元素
var arr = {0: 1, 1: 2, 2: 3, length: 3}
console.log(arr)
// reverse() 调用返回一个颠倒后的类数组对象arr的引用
Array.prototype.reverse.call(arr)
console.log(arr)
// {0: 1, 1: 2, 2: 3, length: 3}
// {0: 3, 1: 2, 2: 1, length: 3}