美文网首页
js数组的操作方法

js数组的操作方法

作者: 嗨超儿 | 来源:发表于2018-04-19 20:43 被阅读65次

    检测数组方法

    isArray()判断是否是数组

    var a = [1,2,3,4,5];
    Array.isArray(a);
    //true
    

    转换方法

    toString()数组转换字符串方法
    数组的 valueOf 会默认调用 toString 方法,所以他们的返回值一样,都是逗号分隔每一项组成的字符串

    var months = ['Jan', 'Feb', 'Mar', 'Apr'];
    months.toString(); // "Jan,Feb,Mar,Apr"
    

    toLocaleString()数组转换字符串方法
    调用数组每一项的 toLocaleString 方法,有时和 toString 方法的结果是一样的。有时也不同,比如 Date 对象元素组成的数组里,返回的结果会不同。

    栈方法

    push()pop()方法允许将数组当做栈来使用
    push()方法在数组的尾部添加一个或多个元素,并返回数组新的长度。
    pop()方法则相反:它删除数组的最后一个元素,减小数组长度并返回它删除的值

    var arr=[]; //arr:[]
    arr.push(1,2); //arr:[1,2]
    arr.pop(); //arr:[1]
    arr.push(3) //arr:[1,3]
    

    队列方法

    unshift()shift()方法将数组当做队列来使用
    unshift()数组前面添加新元素,操作原数组,返回新数组
    shift()删除数组第一项,操作原数组,返回删除项

    var a = [1, 2, 3];
    var b = a.shift();
    
    console.log(a); // [2, 3]
    console.log(b); // 1
    
    var c = [1, 2, 3];
    var d = c.unshift(4, 5);
    
    console.log(c); // [4, 5, 1, 2, 3]
    console.log(d); // 5
    

    重排序方法

    reverse() 将数组反序

    var a = [5,1,3,2,4];
    var b = a.reverse(); //a:[4,2,3,1,5] b:[4,2,3,1,5]
    

    sort() 按指定的参数对数组进行排序,从小到大排序.

    var a = [5,1,3,2,4];
    var b = a.sort(); //a:[1,2,3,4,5] b:[1,2,3,4,5]
    

    操作方法

    concat()合并数组返回新数组

    var arr1 = ['a', 'b', 'c'];
    var arr2 = ['d', 'e', 'f'];
    
    var arr3 = arr1.concat(arr2);
    
    console.log(arr3); //["a", "b", "c", "d", "e", "f"]
    

    slice()基于当前数组创建新数组,返回新数组
    传入两个参数 起始位置(包含) 结束位置(不包含),虎头蛇尾,有始无终。
    传递的参数中有一个负数,则用数组长度加上该数来确定位置。长度为 5 的数组 slice(-2,-1) 与 slice(3, 4) 结果相同。
    结束位置小于起始位置,则返回空数组

    var a = ['1', '2', '3', '4'];
    var sliced = a.slice(1, 3);
    
    console.log(a); // ['1', '2', '3', '4']
    console.log(sliced); // ['2', '3']
    

    splice()实现数组删除、插入、替换。返回被删除元素组成的数组
    可以实现 删除、插入(元素个数大于要删除的元素个数)、替换(删除一个,再添加一个)
    返回被删除元素组成的数组,如果没有被删除元素,返回空数组
    参数: 起始位置(包含)、要删除的元素个数、元素

    var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];
    
    myFish.splice(2, 0, 'drum');
    // ["angel", "clown", "drum", "mandarin", "sturgeon"]
    
    myFish.splice(2, 1);
    // ["angel", "clown", "mandarin", "sturgeon"]
    
    myFish.splice(-1, 0, 'drum');
    //["angel", "clown", "mandarin", "drum", "sturgeon"]
    

    位置方法

    indexOf()从前往后查找
    接受两个参数:查找的值、查找起始位置,不存在,返回 -1 ;存在,返回位置。

    var a = [2, 9, 9];
    a.indexOf(2); // 0
    a.indexOf(7); // -1
    
    if (a.indexOf(7) === -1) {
    // element doesn't exist in array
    }
    

    lastIndexOf()从后往前查找
    接受两个参数:查找的值、查找起始位置,不存在,返回 -1 ;存在,返回位置。

    var numbers = [2, 5, 9, 2];
    numbers.lastIndexOf(2); // 3
    numbers.lastIndexOf(7); // -1
    numbers.lastIndexOf(2, 3); // 3
    numbers.lastIndexOf(2, 2); // 0
    numbers.lastIndexOf(2, -2); // 0
    numbers.lastIndexOf(2, -1); // 3
    

    迭代方法

    ECMAScript 5 提供了5个迭代方法,他们的参数都是给定的函数(当前元素、位置(索引)、数组本身) 可选的,执行回调是的 this 值
    every()对数组的每一项都运行给定的函数,每一项都返回 ture,则返回 true

    function isBigEnough(element, index, array) {
        return element < 10;
    }
    
    [2, 5, 8, 3, 4].every(isBigEnough); // true
    

    some() 对数组的每一项都运行给定的函数,任意一项返回 ture,则返回 true

    function isBiggerThan10(element, index, array) {
        return element > 10;
    }
    
    [2, 5, 8, 1, 4].some(isBiggerThan10); // false
    [12, 5, 8, 1, 4].some(isBiggerThan10); // true
    

    fifter() 对数组的每一项都运行给定的函数,返回 结果为 ture 的项组成的数组

    var words = ["spray", "limit", "elite", "exuberant", "destruction", "present", "happy"];
    
    var longWords = words.filter(function(word){
        return word.length > 6;
    });
    //["exuberant", "destruction", "present"]
    

    map() 对数组的每一项都运行给定的函数,返回每次函数调用的结果组成一个新数组

    var numbers = [1, 5, 10, 15];
    var doubles = numbers.map(function(x) {
        return x * 2;
    });
    // doubles is now [2, 10, 20, 30]
    // numbers is still [1, 5, 10, 15]
    

    forEach()方法从头到位遍历数组, 为每个元素调用指定的函数

    var arr =[1,2,3,4,5];
    //创建个带有元素的数组
    arr.forEach(function(element){
        console.log(element);//输出arr的1,2,3,4,5;
    });
    

    归并方法

    ECMAScript 5 新增了两个归并数组的方法:reduce()和reduceRight()。这两个方法都会迭代数组的所有项,然后构建一个最终的返回值。
    这两个方法比上面的五个迭代方法回调函数多了一个参数:上一项的值
    回调函数参数:上一项、当前元素、位置、数组
    reduce()从前往后遍历

    var numbers = [0, 1, 2, 3];
    var result = numbers.reduce(function(accumulator, currentValue) {
        return accumulator + currentValue;
    });
    console.log(result);// expected output: 6
    

    reduceRight()从后往前遍历

    var flattened = [[0, 1], [2, 3], [4, 5]].reduceRight(function(a, b) {
        return a.concat(b);
    }, []);
    // flattened is [4, 5, 2, 3, 0, 1]
    

    其他

    join()将数组的元素组起一个字符串,数组分隔的逗号用参数代替

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

    valueOf()返回数组对象的原始值

    var colors=["red","blue","green"];
    alert(colors.valueOf());  //red,blue,green
    

    小总结

    • 队列方法和栈方法操作的都是原数组,增加数组元素的时候,返回值是数组长度;删除数组元素的时候,返回值是被删除的元素。
    • 那些方法改变了原数组?
    1. 栈方法:push、pop
    2. 队列方法:shift、unshift
    3. 重排序方法:reverse、sort
    • 那些方法返回的是新数组?
    1. 重排序方法:reverse、sort
    2. 操作方法:splice、slice、concat
    3. 迭代方法中:filter、map

    ECMAScript6.0新增的方法

    from()将类似数组的对象(array-like object)和可遍历(iterable)的对象转为真正的数组

    const bar = ["a", "b", "c"];
    Array.from(bar);
    // ["a", "b", "c"]
    
    Array.from('foo');
    // ["f", "o", "o"]
    

    of() 用于将一组值,转换为数组。这个方法的主要目的,是弥补数组构造函数 Array() 的不足。因为参数个数的不同,会导致 Array() 的行为有差异。

    Array() // []
    Array(3) // [, , ,]
    Array(3, 11, 8) // [3, 11, 8]
    
    Array.of(7); // [7]
    Array.of(1, 2, 3); // [1, 2, 3]
    
    Array(7); // [ , , , , , , ]
    Array(1, 2, 3); // [1, 2, 3]
    

    copyWithin() 将指定位置的元素复制到其他位置(会覆盖原有元素),返回当前数组。该方法会修改当前数组。
    它接受三个参数。

    1. target(必需):从该位置开始替换数据。
    2. start(可选):从该位置开始读取数据,默认为0。如果为负值,表示倒数。
    3. end(可选):到该位置前停止读取数据,默认等于数组长度。如果为负值,表示倒数。
    [1, 2, 3, 4, 5].copyWithin(-2);
    // [1, 2, 3, 1, 2]
    
    
    [1, 2, 3, 4, 5].copyWithin(0, 3);
    // [4, 5, 3, 4, 5]
    
    
    [1, 2, 3, 4, 5].copyWithin(0, 3, 4);
    // [4, 2, 3, 4, 5]
    
    
    [1, 2, 3, 4, 5].copyWithin(-2, -3, -1);
    // [1, 2, 3, 3, 4]
    

    fill() 使用给定值,填充一个数组。
    会抹除数组原有的元素
    还可以接受第二个和第三个参数,用于指定填充的起始位置和结束位置。

    var numbers = [1, 2, 3]
    numbers.fill(1);
    // results in [1, 1, 1]
    
    ['a', 'b', 'c'].fill(7, 1, 2)
    // ['a', 7, 'c']
    

    相关文章

      网友评论

          本文标题:js数组的操作方法

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