xiao

.............

[收集]数组操作

--------内容来源互联网-----

ES6 Arrary.from() 将两类对象转为真正的数组

定义:用于将两类对象转为真正的数组(不改变原对象,返回新的数组)。

参数:

  第一个参数(必需):要转化为真正数组的对象。

  第二个参数(可选): 类似数组的map方法,对每个元素进行处理,将处理后的值放入返回的数组。

  第三个参数(可选): 用来绑定this。

    // 1. 对象拥有length属性
    let obj = {0: 'a', 1: 'b', 2:'c', length: 3};
    let arr = Array.from(obj); // ['a','b','c'];
    // 2. 部署了 Iterator接口的数据结构 比如:字符串、Set、NodeList对象
    let arr = Array.from('hello'); // ['h','e','l','l','o']
    let arr = Array.from(new Set(['a','b'])); // ['a','b']

splice() 添加/删除数组元素(改变数组)

定义: splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目

eg1:删除元素

   let a = [1, 2, 3, 4, 5, 6, 7];
    let item = a.splice(0, 3); // [1,2,3]
    console.log(a); // [4,5,6,7]
    // 从数组下标0开始,删除3个元素
    let item = a.splice(-1, 3); // [7]
    // 从最后一个元素开始删除3个元素,因为最后一个元素,所以只删除了7

 

eg2: 删除并添加

    let a = [1, 2, 3, 4, 5, 6, 7];
    let item = a.splice(0,3,'添加'); // [1,2,3]
    console.log(a); // ['添加',4,5,6,7]
    // 从数组下标0开始,删除3个元素,并添加元素'添加'
     let b = [1, 2, 3, 4, 5, 6, 7];
    let item = b.splice(-2,3,'添加1','添加2'); // [6,7]
    console.log(b); // [1,2,3,4,5,'添加1','添加2']
    // 从数组最后第二个元素开始,删除3个元素,并添加两个元素'添加1'、'添加2'

 

eg3: 不删除只添加:

    let a = [1, 2, 3, 4, 5, 6, 7];
    let item = a.splice(0,0,'添加1','添加2'); // [] 没有删除元素,返回空数组
    console.log(a); // ['添加1','添加2',1,2,3,4,5,6,7]
    let b = [1, 2, 3, 4, 5, 6, 7];
    let item = b.splice(-1,0,'添加1','添加2'); // [] 没有删除元素,返回空数组
    console.log(b); // [1,2,3,4,5,6,'添加1','添加2',7] 在最后一个元素的前面添加两个元素
  1. 数组如果元素不够,会删除到最后一个元素为止
  2. 操作的元素,包括开始的那个元素
  3. 可以添加很多个元素
  4. 添加是在开始的元素前面添加的

sort() 数组排序

  // 字符串排列 看起来很正常
    var a = ["Banana", "Orange", "Apple", "Mango"];
    a.sort(); // ["Apple","Banana","Mango","Orange"]
    // 数字排序的时候 因为转换成Unicode字符串之后,有些数字会比较大会排在后面 这显然不是我们想要的
    var    a = [10, 1, 3, 20,25,8];
    console.log(a.sort()) // [1,10,20,25,3,8];
  • 数组元素为数字的升序、降序:

    var array =  [10, 1, 3, 4,20,4,25,8];
     // 升序 a-b < 0   a将排到b的前面,按照a的大小来排序的 
     // 比如被减数a是10,减数是20  10-20 < 0   被减数a(10)在减数b(20)前面   
     array.sort(function(a,b){
       return a-b;
     });
     console.log(array); // [1,3,4,4,8,10,20,25];
     // 降序 被减数和减数调换了  20-10>0 被减数b(20)在减数a(10)的前面
     array.sort(function(a,b){
       return b-a;
     });
     console.log(array); // [25,20,10,8,4,4,3,1];
  • 数组多条件排序

    var array = [{id:10,age:2},{id:5,age:4},{id:6,age:10},{id:9,age:6},{id:2,age:8},{id:10,age:9}];
    array.sort(function(a,b){
        if(a.id === b.id){// 如果id的值相等,按照age的值降序
                 return b.age - a.age
        }else{ // 如果id的值不相等,按照id的值升序
                 return a.id - b.id
        }
    })
    // [{"id":2,"age":8},{"id":5,"age":4},{"id":6,"age":10},{"id":9,"age":6},{"id":10,"age":9},

    自定义比较函数,天空才是你的极限

    类似的:运用好返回值,我们可以写出任意符合自己需求的比较函数

    var array = [{name:'Koro1'},{name:'Koro1'},{name:'OB'},{name:'Koro1'},{name:'OB'},{name:'OB'}];
        array.sort(function(a,b){
            if(a.name === 'Koro1'){// 如果name是'Koro1' 返回-1 ,-1<0 a排在b的前面
                return -1
            }else{ // 如果不是的话,a排在b的后面
              return 1
            }
        })
        // [{"name":"Koro1"},{"name":"Koro1"},{"name":"Koro1"},{"name":"OB"},{"name":"OB"},{"name":"OB"}] 

     

posted @ 2018-07-30 15:02  蓝色风暴003  阅读(129)  评论(0编辑  收藏  举报