JS数组方法(ES5,ES6)

数组概念

  • []包起来的,一组有序的、任意数据类型的数据集合
  • 数组的长度:array.length
  • JS 中的数组与其他语言的数组,有很大的区别

创建数组的方式

1. 通过构造函数
// 创建空数组var array=new Array(); // 创建数组,并填充三个元素10,20,30var array=new Array(10,20,30); // 创建数组,里面存储7个值var array=new Array(7); 
2.通过字面量
var arr = [];
数组方法参数描述函数原理简述原数组变化返回值
push(需要插入的元素)添加一个或多个元素到数组的末尾改变操作后的数组长度
pop删除一个数组中的最后一个元素改变被删除的元素
shift删除数组的第一个元素,并返回这个元素改变被删除的元素
unshift(需要插入的值)在数组的开头插入一个或多个元素改变数组长度
reverse前后颠倒数组中元素的位置,第一个元素会成为最后一个改变操作后数组
sort(空/比较函数)对数组的元素做原地的排序,并返回这个数组。sort可能不稳定,默认按照字符串的unicode码位点排序改变操作后的原数组
splice(开始索引,要删除数量,要插入值)在任意的位置给数组添加或删除任意个元素(拼接);拼接,拆分数组改变被删除的值(数组形式)无则为空数组
copyWithin(开始索引,替代数组开始的索引/空[默认为0],替代数组结束的索引/空[默认为数组长度])用于在数组内的替换操作,即替换元素和被替换元素都是数组内的元素改变操作后的原数组
concat(需要拼接的数组)用于合并两个或多个数组不变操作后的数组
includes(值,索引/查询起始位置) 用来判断当前数组是否包含某指定的值不变布尔值
indexOf(值,索引/查询起始位置)返回在数组中可以找到一个给定元素的第一个索引不变索引
lastIndexOf(值,索引/查询起始位置)返回在数组中可以找到一个给定元素的最后一个索引,会从数组的后面向前查找不变索引
join(连接符)将一个数组(或一个类数组对象)的所有元素连接成一个字符串不变连接后的字符串
slice(开始索引,终止索引/不包含该位置)在任意的位置给数组添加或删除任意个元素(拼接)不变按逻辑增删后的数组(不改变原数组)
toString使数组变成字符串,用’,’连接。若数组的值存在数组,会便遍历拼接在字符串里;对象,会变成[object Object];undefined则什么都不连接,即会变成,不变字符串
toLocalString使数组变成字符串,用’,’连接。数组内的元素会调用自己的toLocalString方法不变字符串
forEach(callback(item/值,index/索引,array/原数组),v/callback执行的作用域) )forEach遍历的范围在第一次调用 callback前就会确定。调用forEach后添加到数组中的项不会被 callback访问到。如果已经存在的值被改变,则传递给 callback的值是 forEach遍历到他们那一刻的值。已删除的项不会被遍历到不变
map(callback(item/值,index/索引,array/原数组),v/callback执行的作用域))一个由原数组中的每个元素调用一个指定方法后的返回值组成的新数组不变返回值构成的新数组
keys返回一个新的Array迭代器,它包含数组中每个索引的键不变Array迭代器
values返回一个新的Array迭代器,它包含数组中每个值的键不变Array迭代器
entries返回一个新的Array迭代器,它包含数组中每个键值对[index,item]不变Array迭代器
every(callback(value,key,arr),v/callback执行的作用域))若数组的值执行callback全部返回true,则最终返回true不变布尔值
some(callback(value,key,arr),v/callback执行的作用域))若数组的值执行callback有一个返回true,则最终返回true不变布尔值
filter(callback(value,key,arr),v/callback执行的作用域))使用指定的函数测试所有元素,并创建一个包含所有测试通过的元素的新数组不变使callback返回true的值组成的数组
find((callback(v,k,a),v/callback执行的作用域) )返回数组中满足提供的测试函数的第一个元素的值。否则返回 undefined。不变通过测试的第一个元素值或undefined
findIndex((callback(v,k,a),v/callback执行的作用域) )返回数组中满足提供的测试函数的第一个元素的值的索引。否则返回 undefined。不变通过测试的第一个元素值的索引或undefined
reduce(callback(p/上一次回调的返回值,v/当前被处理的元素,i/索引,a/原数组)=> {},initialValue初始值)该方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始合并,最终为一个值不变最后的返回值
reduceRight(callback(p/上一次回调的返回值,v/当前被处理的元素,i/索引,a/原数组) ,initialValue初始值)该方法接收一个函数作为累加器(accumulator),数组中的每个值(从右到左)开始合并,最终为一个值不变最后的返回值
Array.from(类数组对象)一个类似数组或可迭代对象中创建一个新的数组实例不变数组实例
Array.isArray(需要检测的元素)判断一个元素是否为数组不变布尔值
Array.isArray(元素–可多个)创建一个具有可变数量参数的新数组实例不变数组实例
fill(value,开始索引,结束索引)将数组中指定区间的所有元素的值,都替换成value改变

ES5数组方法

push()

可以接受多个参数,并将这些参数放置于数组尾部,返回新数组的长度,原始数组发生改变。

Array.prototype.myPush =function(){
for (var i = 0; i < arguments.length; i++) {
//arguments代表实参的集合
//this 指向的是arr数组
this[this.length] = arguments[i];
}
//由于push 返回值 是一个数组的长度 所以 我们来个return;
return this.length;
};

arr.push(4,5,6);
alert(arr);
//-----结果 [1,2,3,4,5,6];
12345678910111213

pop()

不接收参数,从数组尾部删除一个元素,并返回这个删除的元素,原数组发生改变。

  Array.prototype.myPop = function( ){
            var len=this.length;
            var result = this[len-1];
            this.length = len - 1;
            return result;
        }
        var a = [1,2,3,4]
        console.log(a.myPop( ))//-----结果4;
        console.log(a);//-----结果 [1,2,3];
123456789

unshift()

接受多个参数并,将这些参数放置于数组头部,返回新数组的长度,原数组发生改变。

  Array.prototype.myUnshift=function( ){
    var len=arguments.length-1;
    this.length=this.length+len;
    for(var i=this.length-1;i>=0;i--){
        this[i+len]=this[i]
    }
    for(var j=1;j<arguments.length;j++){
            this[j-1]=arguments[j]
        }
    return this.length
}
var arr=[1,2,5,6];
arr.unshift(10,11)//6
console.log(arr)//[10,11,1,2,5,6];
1234567891011121314

shift()

不接受参数,从数组的头部删除一个元素,并返回这个删除的元素,原数组发生改变。

 Array.prototype.myShift = function(){
      var result = this[0]
      for(var i=0;i<this.length-1;i++){
        this[i] = this[i+1]
      }
      this.length = this.length-1
      return result;
   }
    var a = [1,2,3,4]
     a.myShift()//1
     console.log(a)//[2,3,4]
1234567891011

slice()如果是一个参数,那么该参数表示的索引开始截取,直至数组结束,返回截取的数组,原数组不发生改变。
如果有两个参数,从第一个参数表示的索引开始截取,到第二个参数表示的索引结束,不包括第二个参数对应的索引位上的元素。

Array.prototype.mySlice = function () {
    var startIndex = Number(arguments[0]), 
   endIndex = Number(arguments[1]), 
    newArr = [];
   endIndex =endIndex === undefined ? this.length : Number(endIndex) ? Number(endIndex) : 0;
   endIndex =endIndex < 0 ? Math.abs(endIndex) > this.length &&endIndex > -1? 0 : 
   this.length + Math.ceil(endIndex) :endIndex > this.length ? this.length : Math.floor(endIndex);
    startIndex = startIndex ? startIndex < 0 ? Math.abs(startIndex) > this.length || startIndex > -1 
    ? 0 : this.length + Math.ceil(startIndex) : startIndex > this.length ? this.length: Math.floor(startIndex) : 0;
    for (var i = startIndex; i <endIndex; i++) {
        newArr[newArr.length] = this[i];
    }
    return newArr;
};
var arr=[1,2,3,4,5];
var a1=arr.mySlice(1,3);
console.log(Array.prototype.slice.call({ 0:'a', 1:'b', length:2 }))// ["a", "b"]
console.log(a1)//[2, 3],
123456789101112131415161718

注; slice方法的一个重要应用,是将类似数组的对象转为真正的数组。

Array.prototype.slice.call({ 0'a'1'b', length:2 }) /// ['a', 'b']
Array.prototype.slice.call(document.querySelectorAll("div"));
Array.prototype.slice.call(arguments)123

上面代码的参数都不是数组,但是通过call方法,在它们上面调用slice方法,就可以把它们转为真正的数组。

		var arr=[123456]var arr1=arr.slice(13)var arr1=arr.slice(  )//如果没有任何参数就会从头截取到尾部 拷贝
        var arr1=arr.slice(1)//如果第二个参数没有,就会从开始截取到尾部
        var arr1=arr.slice(-3-1)//如果是负数就会从后向前数,然后再截取
		//前小于后将参数转换为正向数值时,前面的必须小于后面
        var arr1=arr.slice(-35)//如果第一个参数大于等于数组长度,或者第二个参数小于第一个参数,则返回空数组。
        console.log(arr1,arr)123456789101112

splice()

如果一个参数,那么从该参数表示的索引开始截取,直至数组结束,返回截取的数组,原数组发生改变。
如果有两个参数,从第一个参数表示索引,第二个参数表示的是截取的长度。
如果有三个及以上参数,从第一个参数表示索引,第二个参数表示的是截取的长度,后边的会从截取的位置添加至原数组里。

  1. splice方法用于删除原数组的一部分成员,并可以在删除的位置添加新的数组成员,返回值是被删除的元素。注意,该方法会改变原数组。
arr.splice(start, count, addElement1, addElement2, ...)1
  1. splice的第一个参数是删除的起始位置(从0开始也包含该元素),第二个参数是被删除的元素个数。如果后面还有更多的参数,则表示这些就是要被插入数组的新元素。
var a = ['a''b''c''d''e''f'];
a.splice(42) ["e""f"]
a  ["a""b""c""d"]
123

上面代码从原数组4号位置,删除了两个数组成员。

var a = ['a''b''c''d''e''f'];
a.splice(4212) // ["e", "f"]
a // ["a", "b", "c", "d", 1, 2]
123

上面代码除了删除成员,还插入了两个新成员。
\3. 起始位置如果是负数,就表示从倒数位置开始删除

var a = ['a''b''c''d''e''f'];
a.splice(-42)  ["c""d"]
12

上面代码表示,从倒数第四个位置c开始删除两个成员。
\4. 添加元素;如果只是单纯地插入元素,splice方法的第二个参数可以设为0。

var a = [111];
a.splice(102)  [ ]
a  [1211]
123

5.如果只提供第一个参数,等同于将原数组在指定位置拆分成两个数组。

var a = [1234];
a.splice(2)  [34]
a // //[1, 2]
123

原理实现:

 Array.prototype.mySplice = function () {
    var _arr = [],//操作的原数组
        len = this.length,//数组长度
        startIndex = arguments[0],//第一个参数:起始索引
        deleteNum = arguments[1],//第二个参数:删除长度
        insertNum = arguments.length - 2,//添加元素数量
        leftArr = [],//删除元素左边数组
        rightArr = [];//删除元素右边数组
    if (startIndex < 0 || deleteNum < 0) {
        return _arr;
    }
    // 删除
    for (var i = 0; i < deleteNum; i++) {
        _arr[i] = this[startIndex + i]
        for (var i = 0; i < len - deleteNum - startIndex; i++) {
            this[startIndex + i] = this[startIndex + deleteNum + i]
        }
        this.length = len - deleteNum
        if (insertNum === 0) {
            return _arr
        }
    }
    // 添加;替换
    for (var i = 0; i < len - deleteNum; i++) {
        if (i < startIndex) {
            leftArr[leftArr.length] = this[i]
        } else {
            rightArr[rightArr.length] = this[i]
        }
    }
    rightArr.length = len - startIndex - deleteNum;
    for (var i = 0; i < insertNum; i++) {
        leftArr[startIndex + i] = arguments[i + 2];
    }
    for (var i = 0; i < len - deleteNum + insertNum; i++) {
        if (i < startIndex + insertNum) {
            this[i] = leftArr[i]
        } else {
            this[i] = rightArr[i - startIndex - insertNum]
        }
    }
    return _arr;
}
var a = ['a', 'b', 'c', 'd', 'e', 'f',undefined];
a.splice(4, 2) 

// var a = ['a', 'b', 'c', 'd', 'e', 'f'];
// a.splice(4, 2, 1, 2) 

// var a = ['a', 'b', 'c', 'd', 'e', 'f'];
// a.splice(-4, 2) 

// var a = [1, 1, 1];
// a.splice(1, 0, 2);

// var a = [1, 2, 3, 4];
// a.splice(2) 
console.log(a)
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758

reverse()数组翻转参数无意义;改变数组;并返回操作后的原数组。

Array.prototype.myReverse = function( ){
    var arr = this;
    var len=parseInt(arr.length/2)
    for(var i=0;i<len;i++){
        var temp=arr[arr.length-1-i]
        arr[arr.length-1-i]=arr[i];
        arr[i]=temp
    }
    return arr//改变数组
}
var arr=[1,2,4,5,6,7,7,4,3,5]
arr.myReverse( )
console.log(arr)//[5, 3, 4, 7, 7, 6, 5, 4, 2, 1]
12345678910111213

sort()

对数组的元素做原地的排序,并返回这个数组。sort可能不稳定,默认按照字符串的unicode码位点排序。改变数组;并返回操作后的原数组。

var arr = [2,11,50,7,9];
console.log(arr.sort());//按照字符串按位比较方式来判断大小的
arr.sort(function(a,b){
	return a - b;//从小到大
	return b-a;//从大到小
})
console.log(arr);
[101111101111].sort(function (a, b) {return a - b;})
// [111, 1101, 10111]
[4321].sort(  ) // [1, 2, 3, 4]
[11101].sort(  )   ///[101, 11]
[
  { name:"张三", age:30 }{ name:"李四", age:24 }{ name:"王五", age:28  }]
.sort(function (o1, o2) {
  	return o1.age - o2.age;})
// [
//   { name:"李四", age:24 },
//   { name:"王五", age:28  },
//   { name:"张三", age:30 }]
123456789101112131415161718192021

原理实现:

Array.prototype.mySort = function(fn){
    if(Object.prototype.toString.call(fn)==='[object Function]'){
        //如果传进来参数的是函数
        for(var i = 0;i<this.length-1;i++){
            //遍历数组,将前后两项作为实参传给fn
            if(fn.call(this,this[i],this[i+1])>0){
                //如果fn执行之后的返回值大于0.就调用swap方法交换位置
                var a = this[i],b=this[i+1];
                this[i] = swap(a,b).a;
                this[i+1] = swap(a,b).b;
                //交换之后,如果当前项不是第一项,则当前项(索引为i的项)继续跟前面的项进行比较
                if(i>0){
                    for(var j = i-1;j>=0;j--){
                            if(fn.call(this,this[j],this[j+1])>0){
                                var a = this[j],b=this[j+1];
                                this[j] = swap(a,b).a;
                                this[j+1] = swap(a,b).b;
                            }
                        }
                }
            }
        }
    }else{
        //如果不是函数,则按正常排序
        //遍历数组,将前后两项进行比较
        for(var i = 0;i<this.length-1;i++){
            var cur = this[i];//当前项
            var next = this[i+1];//下一项
            if(comASCII(cur,next)){
                //当返回true的时候交换,并且交换完成之后,当前项继续往前比较
                this[i] = swap(cur,next).a;
                this[i+1] = swap(cur,next).b;
                //当前项继续向前比较
                if(i>0){
                    for(var k = i-1;k>=0;k--){
                        var cur = this[k];
                        var next = this[k+1];
                        if(comASCII(cur,next)){
                            this[k] = swap(cur,next).a;
                            this[k+1] = swap(cur,next).b;
                        }
                    }
                }
            }
        }
    }
    //封装一个交换位置的函数
    function swap(a,b){
        return {
            a:b,
            b:a
        }
    }
    //如果不传参的情况下比较ASCII码
    function comASCII(cur,next){
        //全部转换为字符串、逐项比较ASCII码
        cur = cur.toString();
        next = next.toString();
        //取长度最大值
        var len = cur.length>next.length?next.length:cur.length;
        //当前后两项都不是不是{}类型的数据时,进行比较
        if(cur!=='[object Object]'&&next!=='[object Object]'){
            for(var j = 0;j<len;j++){
                if(!isNaN(cur.charCodeAt(j))&&!isNaN(next.charCodeAt(j))){
                    //如果二者的ASCII码都是有效数字
                    if(cur.charCodeAt(j)>next.charCodeAt(j)){
                        //如果前一项比后一项当前的ASCII码大,则返回true,交换位置
                        return true;
                    }else if(cur.charCodeAt(j)==next.charCodeAt(j)){
                    //如果相等直接进入下一轮循环
                            continue;
                        }else{
                        //前项比后项小,直接返回false
                            return false;
                        }
                }
            }
            if(!isNaN(cur.charCodeAt(len))&&isNaN(next.charCodeAt(len))&&(cur.charCodeAt(len-1)==next.charCodeAt(len-1))){
                //比较完之后,如果前一项ASCII还是有效数字,说明前项比后项大,交换
                return true;
            }
        }
        //如果上述条件不满足,则不交换
        return false;
    }
    //返回当前数组
    return this;

说到排序就不得不说三种经典的排序方式:

1. 冒泡排序

 //原理:数组中有n个数,比较相邻的两个数,如果后面的数小于前面的数,则两者交换。
//一轮完成后,此时最大的数据已经在最后,此时进行第二轮,确定倒数第二个数,依次几轮就可完成:
    //1、从后向前循环
    //2、内部从前向后循环到外层变量
    //3、判断前面的值是否大于后面的值,交换
    Array.prototype.Mpsort=function(){
        var arr=this;
        var len=arr.length;
        while(len>0){
            for(var i=0;i<len;i++){
                if(arr[i]>arr[i+1]){
                    var temp=arr[i];
                    arr[i]=arr[i+1];
                    arr[i+1]=temp;
                }
            }
            len--;
        }
    }
    var arr=[1,2,4,6,3,2,6,8]
    arr.Mpsort();
    console.log(arr);
12345678910111213141516171819202122

2. 快速排序

 //原理:取数组中间位置的数据,跟所有数据比较,比该数小的放一新数组,大的放一新数组,使用递归,拼接数据,最后得到想要的数组
//重新赋值给元素替换
Array.prototype.quickSort = function ( ) {
    var arr=this
    if (arr.length <= 1) { return arr; }
    var item = arr.splice(parseInt(arr.length / 2), 1)[0];
    // var item = arr.splice(Math.floor(arr.length / 2), 1)[0];
    var leftArr = [];
    var rightArr = [];
    for (var i = 0; i < arr.length; i++) {
        if (arr[i] < item) {
          leftArr.push(arr[i]);
        } else {
            rightArr.push(arr[i]);
        }
    }
    return leftArr.quickSort().concat([item], rightArr.quickSort());
};

var arr = [1, 2, 34, 2, 1, 3, 2, 8]
arr=arr.quickSort();
console.log(arr)
12345678910111213141516171819202122

3. 选择排序

  //选择排序;
    //先找出最小或者最大的索引值,然后用当前的下标的元素与这个最小的元素比较
    Array.prototype.mySort=function(){
        var minIndex;
        var arr=this;
        for(var i=0;i<arr.length;i++){
            minIndex=i;
            for(var j=i+1;j<arr.length;j++){
                minIndex=arr[minIndex]<arr[j]?minIndex:j;
            }
            var temp=arr[i];
            arr[i]=arr[minIndex];
            arr[minIndex]=temp;
        }
    }
    var arr=[1,2,4,5,6,32,2,2];
    arr.mySort();
    console.log(arr)
123456789101112131415161718

join()将数组中元素以参数来进行拼接;不改变原数组。

var arr = [1,2,3,4];//"1234"
var str = arr.join("-----");
console.log(str,arr)
123

原理实现:

Array.prototype.myJoin=function(separator){
    var str = "";
    if (!this|| !(this.constructor===Array)) return str;
        if (separator === undefined) separator = ",";
        separator = String(separator);
        for (var i = 0; i < this.length; i++) {
            i===this.length-1?str += this[i]:str += this[i] + separator      
        }
        return str;
}
    var arr=[1,2,3,4]
    var item=arr.myJoin("&")
    console.log(arr);
    console.log(item)
1234567891011121314

concat()

合并数组,将参数放到原数组里,如果参数是一个数组,把数组中的元素提出来,放到原数组中。不改变原数组。

Array.prototype.myConcat = function() {
            var arr = JSON.parse(JSON.stringify(this)); 
              // 这里用JSON可以深度拷贝数组
            for (var i = 0; i < arguments.length; i++) {
                var arg = arguments[i]; 
                for ( var j = 0; j < arg.length; j++ ) {
                    arr.push(arg[j]);
                }
            };
            return arr;
        }
        var arr1 = [1,2,3], arr2 = ['a','b','c'];
        console.log("arr1.myConcat(arr2)":arr1.myConcat(arr2));
        console.log("arr1":arr1);
        console.log("arr2":arr2);
123456789101112131415

toString()

使数组变成字符串,用’,’连接。若数组的值存在数组,会便遍历拼接在字符串里;对象,会变成[object Object];undefined则什么都不连接,返回最后转化的字符串;不会改变原数组。

toLocalString()

使数组变成字符串,用’,’连接。数组内的元素会调用自己的toLocalString方法;返回最后转化的字符串;不会改变原数组。

for

遍历数组;(不用for in遍历)

	var arr = ["a","b","c","d"];
		for(var i = 0; i < arr.length; i++){
			console.log(arr[i]);
			}

ES6数组的方法

forEach

遍历数组,无返回值

let arr = [1,2,3,4,5]
arr.forEach((value, index, array) => {
   console.log(`value--${value}    index--${index}    array--${array}`)
})

// value--1    index--0    array--1,2,3,4,5
// value--2    index--1    array--1,2,3,4,5
// value--3    index--2    array--1,2,3,4,5
// value--4    index--3    array--1,2,3,4,5
// value--5    index--4    array--1,2,3,4,5

map

遍历数组(对原数组的值进行操作),返回一个新数组

遍历数组(对原数组的值进行操作),返回一个新数组

let arr = [1,2,3,4,5]
let arr2 = arr.map( (value, index, array)=>{
       return value = value * 2
 })   
 console.log(arr2) // [2,4,6,8,10]

filter

过滤数组,返回一个满足要求的数组

 let arr = [1,2,3,4,5]
 let arr2 = arr.filter((value, index) => value >2)
  console.log(arr2)  // [3,4,5]

every

根据判断条件,遍历数组中的元素,是否都满足,若都满足则返回true,反之返回false

let arr = [1,2,3,4,5]

let arr2 = arr.every((value, index) => i > 2)
console.log(arr2)  // false

let arr3 = arr.every((value, index) => i > 0)
console.log(arr3)  // true

some

根据判断条件,遍历数组中的元素,是否存在至少有一个满足,若存在则返回true,反之返回false

let arr = [1,2,3,4,5]

let arr2 = arr.some((value, index) => i > 2)
console.log(arr2)  // true

let arr3 = arr.some((value, index) => i > 5)
console.log(arr3)  // false

reduce

接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。

var arr = [1, 2, 3, 4];
var sum = arr.reduce(function(prev, cur, index, arr) {
    console.log(prev, cur, index);
    return prev + cur;
})
console.log(arr, sum);
打印结果:
1 2 1
3 3 2
6 4 3
[1, 2, 3, 4] 10

from

将伪数组变成数组,只要有length的就可以转成数组

let str = '12345'
 console.log(Array.from(str))    // ["1", "2", "3", "4", "5"]
 let obj = {0:'a',1:'b',length:2}
 console.log(Array.from(obj))   // ["a", "b"]

of

将一组值转换成数组,类似于声明数组

let str = '11'
 console.log(Array.of(str))   // ['11']
 
 等价于 
 console.log(new Array('11'))   // ['11] ps:  new Array()有缺点,就是参数问题引起的重载  console.log(new Array(2))  // [empty × 2] 是个空数组  console.log(Array.of(2))  //  [2]

find

找到第一个符合条件的数组成员

let arr = [1,2,3,4,5,2,4]
let arr2 = arr.find((value, index, array) => value > 2)
 console.log(arr2)   // 3

findIndex

找到第一个符合条件的数组成员的索引值

let arr = [1,2,3,4,5]
let arr1 = arr.findIndex((value, index, array) => value > 2)
 console.log(arr1)  // 2

includes

判断数组中是否包含特定的值

let arr = [1,2,3,4,5]

let arr2 = arr.includes(2)  
console.log(arr2)    // ture

let arr3 = arr.includes(9) 
console.log(arr3)    // false

let arr4 = [1,2,3,NaN].includes(NaN)
console.log(arr5)    // true

fill(target, start, end)

使用给定的值,填充一个数组(改变原数组)

参数: target – 待填充的元素
      start – 开始填充的位置 - 索引
     end – 终止填充的位置 - 索引(不包括该位置)

let arr = [1,2,3,4,5]

let arr2 = arr.fill(5)
console.log(arr2)  // [5, 5, 5, 5, 5]
console.log(arr)   // [5, 5, 5, 5, 5]

let arr3 = arr.fill(5,2)
console.log(arr3)  // [1,2,5,5,5]

let arr4 = arr.fill(5,1,3)
console.log(arr4)  // [1,5,5,4,5]

flat(pliy)

对数组内嵌套的数组“拉平”,就是把数组中的数组的元素挨个拿出来,放数组元素所在位置,返回一个新的数组,不会影响到原来的数组

 let arr = [1, 2, [3, [4, 5]]]
 console.log(arr.flat(2))  // [1, 2, 3, 4, 5]

 let arr2 = [1,[2,[3,[4,5]]]]
 console.log(arr2.flat(Infinity))  // [1,2,3,4,5]

flatMap

对原数组的每个成员执行一个函数,相当于执行Array.prototype.map(),然后对返回值组成的数组执行flat()方法。该方法返回一个新数组,不改变原数组。只能展开一层数组

// 相当于 [[2, 4], [3, 6], [4, 8]].flat()
[2, 3, 4].flatMap((x) => [x, x * 2])
// [2, 4, 3, 6, 4, 8]

entries()

遍历数组的键名和键值

let arr = [1,2,3,4,5]
let arr2 = arr.entries()
for (let e of arr2) {
    console.log(e);   // [0,1] [1,2] [2,3] [3,4] [4,5]
}  entries() 方法返回迭代数组。  迭代数组中每个值 前一个是索引值作为 key, 数组后一个值作为 value。

values()

遍历数组键值

let arr = [1,2,3,4,5]
let arr1 = arr.values()
for (let val of arr1) {
     console.log(val);   // 1,2,3,4,5
}

keys()

遍历数组的键名

 let arr = [1,2,3,4,5]
 let arr2 = arr.keys()
  for (let key of arr2) {
    console.log(key)   // 0,1,2,3,4
  }

copyWithin()

在当前数组内部,将制定位置的数组复制到其他位置,会覆盖原数组项,返回当前数组

参数:  target --必选 索引从该位置开始替换数组项
     start --可选 索引从该位置开始读取数组项,默认为0.如 果为负值,则从右往左读。
     end --可选 索引到该位置停止读取的数组项,默认是 Array.length,如果是负值,表示倒数

let arr = [1,2,3,4,5,6,7]

let arr2 = arr.copyWithin(1)
console.log(arr2)   // [1, 1, 2, 3, 4, 5, 6]

let arr3 = arr.copyWithin(1,2)
console.log(arr3)   // [1, 3, 4, 5, 6, 7, 7]

let arr4 = arr.copyWithin(1,2,4)
console.log(arr4)   // [1, 3, 4, 4, 5, 6, 7]

推荐:https://www.cnblogs.com/zyfeng/p/10541133.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值