array

作者: 枣阳黄小明 | 来源:发表于2019-05-09 11:01 被阅读0次
    array是js原生对象,同时也是一个构造函数,可以用他生成新的数组,(一般不要用,参数不同结果有差异)
    var arr=new Array(2);
    arr.length // 2
    arr // [ empty x 2 ]
    

    静态方法 Array.isArray();

    Array.isArray();方法返回一个布尔值,表示参数是否是数组,它可以弥补typeof运算符的不足。

    实例方法

    valueOf();toString();

    valueOf方法是一个所有对象都拥有的方法,表示该对象求值。不同对象的valueOf方法不尽一致,数组的valueOf方法返回数组本身

    var arr=[1,2,3];
    arr.valueOf();//[1,2,3]
    

    toString方法也是对象的通用方法,数组的toString方法返回数组的字符串形式。

    var arr=[1,2,3];
    arr.toString();//"1,2,3"
    var arr=[1,2,3,[4,5,6]];
    arr.toString();//"1,2,3,4,5,6"
    

    push();pop();

    push方法用于在数组的末端添加一个或多个元素,并返回添加新元素后的数组长度,注意,该方法会改变原数组

    var arr=[];
    arr.push(1);//1
    arr.push('a');//2
    arr.push(true,{})//4
    arr //[1,'a',true,{}]
    

    pop方法用于删除数组的最后一个元素,并返回该元素,改变原素组

    var arr=['a','b','c'];
    arr.pop();//'c'
    arr //['a','b']
    

    对空数组使用pop方法,不报错,undefined

    后进先出
    

    shift(),unshift()

    shift()方法用于删除数组的第一个元素,并返回该元素。注意,该方法会改变原数组。

    var a = ['a', 'b', 'c'];
    a.shift() // 'a'
    a // ['b', 'c']
    

    shift()方法可以遍历并清空一个数组。

    var list = [1, 2, 3, 4];
    var item;
    while (item = list.shift()) {
      console.log(item);
    }
    list // []   并不可靠,判断0的问题
    

    push()和shift()结合使用,就构成了“先进先出”的队列结构(queue)。

    unshift()方法用于在数组的第一个位置添加元素,并返回添加新元素后的数组长度。注意,该方法会改变原数组。

    var a = ['a', 'b', 'c'];
    a.unshift('x'); // 4
    a // ['x', 'a', 'b', 'c']
    

    unshift()方法可以接受多个参数,这些参数都会添加到目标数组头部。

    var arr = [ 'c', 'd' ];
    arr.unshift('a', 'b') // 4
    arr // [ 'a', 'b', 'c', 'd' ]
    

    join()

    join()方法以指定参数作为分隔符,将所有数组成员连接为一个字符串返回。如果不提供参数,默认用逗号分隔。

    var a = [1, 2, 3, 4];
    a.join(' ') // '1 2 3 4'
    a.join(' | ') // "1 | 2 | 3 | 4"
    a.join() // "1,2,3,4"
    

    如果数组成员是undefined或null或空位,会被转成空字符串。

    [undefined, null].join('#')
    // '#'
    ['a',, 'b'].join('-')
    // 'a--b'
    

    通过call方法,这个方法也可以用于字符串或类似数组的对象。

    Array.prototype.join.call('hello', '-')
    // "h-e-l-l-o"
    
    var obj = { 0: 'a', 1: 'b', length: 2 };
    Array.prototype.join.call(obj, '-')
    // 'a-b'
    

    concat()

    concat方法用于多个数组的合并。它将新数组的成员,添加到原数组成员的后部,然后返回一个新数组,原数组不变。

    ['hello'].concat(['world'])
    // ["hello", "world"]
    
    ['hello'].concat(['world'], ['!'])
    // ["hello", "world", "!"]
    
    [].concat({a: 1}, {b: 2})
    // [{ a: 1 }, { b: 2 }]
    
    [2].concat({a: 1})
    // [2, {a: 1}]
    

    除了数组作为参数,concat也接受其他类型的值作为参数,添加到目标数组尾部。

    [1, 2, 3].concat(4, 5, 6)
    // [1, 2, 3, 4, 5, 6]
    

    如果数组成员包括对象,concat方法返回当前数组的一个浅拷贝。所谓“浅拷贝”,指的是新数组拷贝的是对象的引用。

    var obj = { a: 1 };
    var oldArray = [obj];
    
    var newArray = oldArray.concat();
    
    obj.a = 2;
    newArray[0].a // 2
    

    reverse()

    reverse方法用于颠倒排列数组元素,返回改变后的数组。注意,该方法将改变原数组。

    var a = ['a', 'b', 'c'];
    
    a.reverse() // ["c", "b", "a"]
    a // ["c", "b", "a"]
    

    slice()

    slice方法用于提取目标数组的一部分,返回一个新数组,原数组不变。

    arr.slice(start, end);
    

    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);
    

    splice()

    splice方法用于删除原数组的一部分成员,并可以在删除的位置添加新的数组成员,返回值是被删除的元素。注意,该方法会改变原数组。

    arr.splice(start, count, addElement1, addElement2, ...);
    
    var a = ['a', 'b', 'c', 'd', 'e', 'f'];
    a.splice(4, 2) // ["e", "f"]
    a // ["a", "b", "c", "d"]
    
    var a = ['a', 'b', 'c', 'd', 'e', 'f'];
    a.splice(4, 2, 1, 2) // ["e", "f"]
    a // ["a", "b", "c", "d", 1, 2]
    

    如果只是单纯地插入元素,splice方法的第二个参数可以设为0。

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

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

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

    sort()

    sort方法对数组成员进行排序,默认是按照字典顺序排序。排序后,原数组将被改变。

    ['d', 'c', 'b', 'a'].sort()
    // ['a', 'b', 'c', 'd']
    
    [4, 3, 2, 1].sort()
    // [1, 2, 3, 4]
    
    [11, 101].sort()
    // [101, 11]
    
    [10111, 1101, 111].sort()
    // [10111, 1101, 111]
    

    如果想让sort方法按照自定义方式排序,可以传入一个函数作为参数。

    [10111, 1101, 111].sort(function (a, b) {
      return a - b;
    })
    // [111, 1101, 10111]
    

    map()

    map方法将数组的所有成员依次传入参数函数,然后把每一次的执行结果组成一个新数组返回。

    var numbers = [1, 2, 3];
    
    numbers.map(function (n) {
      return n + 1;
    });
    // [2, 3, 4]
    
    numbers
    // [1, 2, 3]
    

    map方法接受一个函数作为参数。该函数调用时,map方法向它传入三个参数:当前成员、当前位置和数组本身。

    [1, 2, 3].map(function(elem, index, arr) {
      return elem * index;
    });
    // [0, 2, 6]
    

    map方法还可以接受第二个参数,用来绑定回调函数内部的this变量(详见《this 变量》一章)。

    var arr = ['a', 'b', 'c'];
    
    [1, 2].map(function (e) {
      return this[e];
    }, arr)
    // ['b', 'c']
    
    1-Object.assign() :实现的是对对象的浅拷贝。返回值是新生成的对象,通常用于对象的合并,相同的属性后者会覆盖前者。
    2-RegExpObject.exec() :如果exec()找到了匹配的文本,则返回一个结果数组。否则返回null。此数组的第0个元素是正则表达式相匹配的文本
    3-array.entrise():entries() 方法返回一个数组的迭代对象,该对象包含数组的键值对(key/value).迭代对象中数组的索引值作为key数组元素作为value
    4-Set()和Map() :Map() 接受一个二维数组,key/value形式存储,Set() 一维数组,可以用来去重
    5-fill():数组初始化的时候义可以用来填充初始值

    相关文章

      网友评论

          本文标题:array

          本文链接:https://www.haomeiwen.com/subject/iueefqtx.html