JS7---数组算法

数组的常规算法

一. 数组的赋值及声明

length为数组的唯一属性

Array JS中的内置对象

数组为object对象(object为浏览器最大对象),所以数组什么数据类型都可装
数组简化声明 var arr=[ ];
    var arr=new Array();        //new 初始化新建对象
    console.log(typeof (arr));  //object
    //数组的赋值
    arr[0]=1;
    arr[1]="a";
    arr[2]=null;
    arr[3]={};
    arr[4]=true;
    arr[5]=undefined;
    arr[6]=function(){};
    console.log(arr);          //[1, "a", null, {…}, true, undefined, ƒ]
    //直接赋值
    var arr2=new Array(1,2,3);
    console.log(arr2);        //[1, 2, 3]

二. 数组里边的算法

1.concat 数组合并

字符串中也有此方法

    var a=[1,2,3];
    var b=[4,5,6];
    var c=["1","2"];
    console.log(a.concat(b).concat(a));  //[1, 2, 3, 4, 5, 6, 1, 2, 3]
    console.log(a.concat(c));            //[1, 2, 3, "1", "2"]

2.filter 过滤数组 返回过滤出的值(有过滤条件,一定要写return返回值)

三个参数(值,索引,数组)

感觉也有数组遍历的意思在其中,数组遍历后,过滤出返回符合条件的值

    var e=[1,3,4,4];
    var filt=e.filter(function(val,index,arr){
                console.log(val,index,arr);
                //1 0 (4) [1, 3, 4, 4]
                  3 1 (4) [1, 3, 4, 4]
                  4 2 (4) [1, 3, 4, 4]
                  4 3 (4) [1, 3, 4, 4]
            }
    )
    var e=[1,2,3,4,4,5,6,7];
    var fil=e.filter(function(val,index,arr){
        if(val/2==2){              //过滤条件,符合条件的被过滤出
            return val;            //里边一定要有返回值
        }
    })
    console.log(fil);             //[4, 4]

3.forEach 数组的遍历 会改变原数组

只用来遍历数组,无返回值,会改变原数组(相当于for循环)

可以用来执行一些改变原数组的操作
与filter参数一样

    var f=[1,6,8,3];
    f.forEach(function(val,index,arr){
        console.log(val, index, arr);
        //1 0 (4) [1, 6, 8, 3]
		  6 1 (4) [1, 6, 8, 3]
		  8 2 (4) [1, 6, 8, 3]
 		  3 3 (4) [1, 6, 8, 3]
    })
    var f=[1,6,8,3];
    f.forEach(function(val,index,arr){
        console.log(val, index, arr);
        //1 0 (4) [1, 6, 8, 3]
		  6 1 (4) [1, 6, 8, 3]
		  8 2 (4) [1, 6, 8, 3]
		  3 3 (4) [1, 6, 8, 3]
    })
    var bianli=f.forEach(function (a, b, c) {
        f[b] += a;
        return a;
    })
    console.log(bianli);  //undefined
    console.log(f);       //[2, 12, 16, 6]

4.map 数组的遍历 但有返回值

与forEach对比记忆,两个都是数组的遍历,参数也均相同
一般要是选出特定的数值,要用filter ,用map遍历后不符合的也会输出undefined

forEachmap
没有返回值有返回值
会改变原数组不会改变原数组
    var g=[1,6,3,8,3];
    var map= g.map(function(a,b,c){
        console.log(a, b, c);
        //1 0 (5) [1, 6, 3, 8, 3]
		  6 1 (5) [1, 6, 3, 8, 3]
 		  3 2 (5) [1, 6, 3, 8, 3]
 		  8 3 (5) [1, 6, 3, 8, 3]
		  3 4 (5) [1, 6, 3, 8, 3]
        if(g[b]==3){
            return b;      //[undefined, undefined, 2, undefined, 4]  
        }
        // return 1;   //[1, 1, 1, 1, 1]
    })
    console.log(map);

5.join 将数组转化为字符串 对象.join()

split将字符串转化为数组

用括号中的字符将他们分开
    var f=[1,2,3,4,5,6];
    console.log(f.join());      //1,2,3,4,5,6
    console.log(f.join(""));    //123456
    console.log(f.join(","));   //1。2。3。4。5。6

6.indexOf 找到指定数组元素返回索引,找不到返回-1

字符串中也有此方法
多个重复元素,只返回第一个索引值

    var d=[1,2,3,4,5,6,3];
    console.log(d.indexOf(3));  //2

7.slice 截取数组 (开始,结束) 返回截取的数组

字符串中也有此方法,也是对原数组无影响,返回值为截取后的数组

8.splice (开始,长度) 对原数组有影响

也可以叫数组的删除,删除数组中间元素,因为会影响原数组

与substr类似

    var j=[1,2,3,5,1];
    console.log(j.slice(2, 1));    //[]  没有的话,返回空集
    console.log(j.slice(1, 4));    //[2, 3, 5]
    console.log(j.splice(2, 1));   //[3]
    console.log(j);                //[1, 2, 5, 1]

增数组的追加

9.push 往后追加 会改变原数组 返回值为数组的长度

unshift 往前追加

    var t=[1,5,8,3,2];
    console.log(t.push(4)); //6
    console.log(t);         //[1, 5, 8, 3, 2, 4]
    console.log(t.unshift(1));//7
    console.log(t);//(7) [1, 1, 5, 8, 3, 2, 4]

10.shift前删 改变原数组的值(删除)

pop后删
    var v=[1,2,3,4,5,6];
    v.shift();
    console.log(v);   //[2, 3, 4, 5, 6]
    v.pop();
    console.log(v);  //[2, 3, 4, 5]
删除中间的 splice

11.reserve 反转数组

var v=[2, 3, 4, 5];
console.log(v.reverse());  //[5, 4, 3, 2]

12.sort 数组排序 从小到大 对原数组有影响

发现sort只能处理一位数。若有多位数,只能识别多位数的第一位数进行排序

var q=[1,8,4,46,2,8];
var q2=[1,8,4,5,2,8];
console.log(q.sort());    // [1, 2, 4, 46, 8, 8]
console.log(q);           // [1, 2, 4, 46, 8, 8]
console.log(q2.sort());   // [1, 2, 4, 5, 8, 8]
console.log(q2);          // [1, 2, 4, 5, 8, 8]
底层方法 改变底层sort方法将数组从 大到小 排序
var qq=q.sort(function(n1,n2){
    return n1-n2;
});
console.log(qq);         // [1, 2, 4, 8, 8, 46]
var qq=q.sort(function(n1,n2){
    return n2-n1;
});
console.log(qq);        // [46, 8, 8, 4, 2, 1]

13.some 检测数组中的值 返回值为true/flase

值存在返回true,值不存在flase

三个参数
    var s=[1,2,3,4,3];
    var ss=s.some(function(a,b,c){
        console.log(a, b, c);
        //1 0 (5) [1, 2, 3, 4, 3]
		  2 1 (5) [1, 2, 3, 4, 3]
		  3 2 (5) [1, 2, 3, 4, 3]
		  4 3 (5) [1, 2, 3, 4, 3]
        return a==4;
    })
    console.log(ss); //返回值为 true

14.reduce 累加器

应用:数组求和,累乘
index参数一般用不到

三个参数 totle:计算结束的返回值;current:当前元素;
    var m=[1,3,6,10];
    var re=m.reduce(function(totle,current,index){
        console.log(totle, current,index);  
        //1 3 1
	      4 6 2
	      10 10 3
        return totle+=current;      // 20   累加器
        return totle*=current;      // 180  累乘器
    })
    console.log(re); 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值