数组方法总结

一、稀松数组

1、稀松数组概念;

2、访问empty打印值是undefined;

二、类数组(是对象,有length属性,可以通过[ ]访问,但是没有Array上的方法)

 1、arguments
 2DOM List
 3、String -->   var str ='12345';
                 console.log(str[1]);//2
                 console.log(str.length);//5

三、数组上面方法:ES5和以前
1、转字符串 toString( ) join( ) || str.split( )

1、toString( ): 去掉数组最外面那层[],多层嵌套也可以
console.log(Array.prototype.toString.call([[1, 2], [3, 4]]));//'1,2,3,4'

2、join( ):可以去掉数组最外面那层[ ],但是一旦传入分隔符-,它就只能拔第一层
console.log([1, [2, [3, 4, 5]]].join());//1,2,3,4,5
console.log([1, [2, [3, 4, 5]]].join('-'));//1-2,3,4,5 --》跟toString区别

3、str.split( )
var str = '123';
console.log(str.split());//['123']
console.log(str.split(''));//['1', '2', '3']

2、堆栈方法 push( ) 、pop( ) || unshift( )、shift( )

push( ) 返回值:增加数组后的长度
pop( ) 返回值:删除的项目

unshift( ) 返回值:增加数组后的长度
shift( ) 返回值:删掉的项目

var arr = [1, 2, 3, 4, 5];
console.log(arr, arr.push(8));//[1, 2, 3, 4, 5, 8] 6
console.log(arr, arr.pop( ));//[1, 2, 3, 4, 5] 8
console.log(arr, arr.unshift(0));//[0, 1, 2, 3, 4, 5] 6
console.log(arr, arr.shift( ));//[1, 2, 3, 4, 5] 0

3、排序方法 reserve( )、sort( )、随机排序 Math.random( )

reserve( ) 返回值:倒序后的原数组(操作原数组)
sort( ) 返回值:重新排序后的原数组(操作原数组)
随机排序 Math.random( )
var arr = [1, 2, 3];
console.log(arr, arr.sort((a, b) => b-a));//[3, 2, 1] [3, 2, 1]
console.log(arr, arr.reverse(arr));//[3, 2, 1] [3, 2, 1]

4、数组拼接 concat( )

var arr = [1, 2];
console.log(arr.concat(3, 4));//[1, 2, 3, 4]
console.log(arr.concat([3, 4]));//[1, 2, 3, 4]

//concat( ) 不能拼接嵌套数组
console.log(arr.concat([1, [2]]));//[1, 2, 1, Array(1)] x

5、删改数组 slice( ) 、splice( )

slice( ) 1[) 左闭右开 ; 
        2、start end (无法倒序);

             用法 1、截取一个数组,并返回新数组(不会操作原数组)
                     //不传参数,复制一份原数组返回
                     var arr = [1, 2, 3, 4, 5];
                     console.log(arr.slice())//[1, 2, 3, 4, 5]
                     //传一个参数,截取数组
                     var arr = [1, 2, 3, 4, 5];
                     console.log(arr.slice(2));//[3, 4, 5]
                     //传二个参数,左闭右开,截取数组
                     var arr = [1, 2, 3, 4, 5];
                     console.log(arr.slice(2, 4));//[3, 4]
                     //start end (无法倒序);
                     var arr = [1, 2, 3, 4, 5];
                     console.log(arr.slice(4, 2));//[]
                    //传负数,反过来算开始索引位置,然后再往右截取
                     var arr = [1, 2, 3, 4, 5];
                     console.log(arr.slice(-2))//[4, 5]

                     var arr = [1, 2, 3, 4, 5];
                     console.log(arr.slice(-2, -1));//[4]

                  2、将字符串、类数组转变为数组
                     var str = '12345';
                     console.log(Array.prototype.slice.call(str));//['1', '2', '3', '4', '5']
            
                     function test( ){
                          console.log(Array.prototype.slice.call(arguments));//[1, 2, 3, 4, 5]
                      }
                      test(1,2,3,4,5);

splice( )
        用法1、返回删除的元素组成的新数组(会修改原数组),如果不传,则返回空数组
        //不传参数,不做操作
        var arr = [1, 2, 3, 4, 5, 6];
        console.log(arr, arr.splice( ))//[]
        //一个参数,做截取操作,左闭右开
        var arr = [1, 2, 3, 4, 5, 6];
        console.log(arr, arr.splice(3))//[1, 2, 3]  [4, 5, 6] 
        //二个参数,1、start:增加或者删除的位置  2、指定删除的个数
        var arr = [1, 2, 3, 4, 5, 6];
        console.log(arr, arr.splice(0, 3))//[4, 5, 6]  [1, 2, 3]
        //三个参数,插入的值
        var arr = [1, 2];
        console.log(arr.splice(0, 0, 'a', 'b'))//['a', 'b', 1, 2]
        console.log(arr.splice(0, 0, ['a', 'b']))//[Array(2), 1, 2]//当一个值插入,和concat()不一样

6、索引方法 indexOf( ) 、 lastIndexOf( )

indexOf( ) :返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1
lastIndexOf( ) :返回指定元素(也即有效的 JavaScript 值或变量)在数组中的最后一个的索引,如果不存在则返回 -1。从数组的后面向前查找,从 fromIndex 处开始

7、ES6中 Array.of( ) 、Array.from( )

//以前可以通过Array( )来创建数组,但是传一个参数进去和几个参数进去,存在很大差异
console.log(Array(3));//Array(3),length = 3
console.log(Array(1, 2, 3));//[1, 2, 3]

//所以ES6引入Array.of( )优化
console.log(Array.of(3));//[3]
console.log(Array.of(1, 2, 3));//[1, 2, 3]

Array.from( ):将类数组变为数组
//ES5方法
function test( ){
    console.log(Array.prototype.slice.call(arguments));//[1, 2]
};
test(1, 2);
//ES6
function test( ){
    console.log(Array.from(arguments));//[1, 2]
};
test(1, 2);
//...运算符 = Array.from( )
function test( ){
    console.log([...arguments]);//[1, 2]
};
test(1, 2);

四、数组迭代的方法 forEach( ) 、 map( ) 、 filter ( ) 、some ( ) every( ) 、reduce( )

总结:
    forEach:循环
    map:返回一个跟原数组有映射关系的数组,原数组有几项就会返回几项,成对出现
    filter:返回一个过滤某一项或者几项的数组
    some:用于判断,有一项通过,返回布尔值 true
    every:用于判断,里面数组是每一项全部通过,返回布尔值 true
--> forEach( ) 
1、第一个参数:callback函数,有三个形参(item:迭代项  index:索引  arr:原数组)
            var arr = [9, 8, 7, 6];
            arr.forEach(function(item, index, arr){
                console.log(item);//9 8 7 6
                console.log(index);//0 1 2 3
                console.log(arr);//[9, 8, 7, 6]
            })
//map forEach filter some every中item、index和arr参数都是一样的

2、第二个参数,this指向,默认是window
 var obj = {
     name: '张三',
     times: [1, 2, 3],
     print: function( ){
                console.log(this);//obj
                this.times.forEach(function(item){
                       console.log(this);//window
                 })
            }
       }
       obj.print( );
       传入this,可以保存到全局this,本例是obj
            var obj = {
                name: '张三',
                times: [1, 2, 3],
                print: function(){
                    console.log(this);//obj
                    this.times.forEach(function(item){
                        console.log(this);//window --> obj
                    }, this)
                }
            }
            obj.print();

3、forEach没有返回值,哪怕你直接return 一个值 都不行

4、空数组、稀松数组 并不会调用forEach()方法
var arr = [ ];
arr.forEach(function( ){
    console.log(1);//什么都没打印
})

var arr = [1, , ,3];
arr.forEach(function(item){
    console.log(item);//1 3
})

5、类数组 调用forEach( ) 1、强制调用 2、转数组后调用
function test( ){
    // console.log(arguments.forEach(function(item){
    //     console.log(item);// TypeError: arguments.forEach is not a function
    //}))
    //1、类数组变成数组,再调用,现在用
    //[...arguments].forEach(function(item){
    //     console.log(item);//1 2
    // })
    //2、强行调用
Array.prototype.forEach.call(arguments, function(item){
      console.log(item);//1 2
    })
            
}
 test(1, 2);
--> map( ) 
 2.1:返回一个映射函数
 2.2this指向 
 2.3: 其他都跟forEach一样
 var arr = [1, 2, 3];
            var arr1 = arr.map(function(item, index, arr){
                return item * 2;
            })
            console.log(arr1);//[2, 4, 6]

//后端返回的数据,希望拿到里面name值,怎么做?
          var user = [
                {
                    name: '张三',
                    age: 18,
                    sex: 'male'
                },{

                    name: '李四',
                    age: 20,
                    sex: 'male' 
                },{
                    name: '王五',
                    age: 16,
                    sex: 'male'
                }
            ];
            var nameArr = user.map(function(item){
                return item.name;
            });
            console.log(nameArr);//['张三', '李四', '王五']
--> filter( ) 过滤数组
返回:一个只有true值的数组
     1return item:直接返回一个true值的数组
     2return item+判断条件:直接返回一个对应条件true值的数组
     
     //常见需求:去掉原本数组里面的undefined、null去掉
            var arr = [1, 3, 4,undefined, null, 8, 0];
            var newArr = arr.filter(function(item, index, arr){
                return item != undefined;//undefined != undefined/null != undefined 返回flase,被过滤
            })
            console.log(newArr);//[1, 3, 4, 8, 0]
--> some:用于判断,只要有一个成员通过,那么返回就是true
--> every:用于判断,所有成员都要通过,那么返回就是true
 var arr = [1, 2, 3, 4, 5];
            var arr1 = arr.some(function(item, index, arr){
                return item % 2 === 0;
            });
            var arr2 = arr.every(function(item, index, arr){
                return item % 2 === 0;
            });
            console.log(arr1, arr2);//true false
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值