• ES6中数组新增的方法超级好用


    Array.find((item,indexArr,arr)=>{}) 掌握

    找出第一个符合条件的数组成员。
    它的参数是一个回调函数,对所有数组成员依次执行该回调函数。
    直到找出第一个返回值为true的成员,然后返回该成员。
    如果没有符合条件的成员,则返回undefined。
    
    -- 找出第一个大于15的数字
    let arr = [10, 20, 30]
    let firstItem = arr.find((item, index, Arr) => {
        return item > 15
    })
    console.log('firstItem==>', firstItem); //输出20
    
    -- 找出第一个大于19的数字的这一项的值
    let arr = [{
        age: 10
      }, {
        age: 20
      }, {
        age: 30
      }]
    let firstItem = arr.find((item, index, Arr) => {
        return item.age > 19
    })
    console.log('firstItem==>', firstItem); //输出{age: 20}
    

    Array.findIndex((item, index, Arr) => {}) 掌握

    数组实例的 findIndex 方法的用法与find方法非常类似,
    返回第一个符合条件的数组成员的位置,如果所有成员都不符合条件,则返回-1。
    let arr = [{
        age: 10
    }, {
        age: 20
    }, {
        age: 30
    }]
    let a = arr.findIndex((item, index, Arr) => {
        return item.age > 15
    })
    let b = arr.findIndex((item, index, Arr) => {
        return item.age > 45
    })
    console.log('a==>', a); //输出1
    console.log('b==>', b); //输出-1
    
    
    //查找数组的某一项是否有某个值
    //返回第一个符合条件的数组成员的位置
    const arr = [{
        id: 001
    }, {
        id: 002
    }, {
        id: 003
    }];
    let index = arr.findIndex(item => {
        return item.id == '004'
    })
    console.log(index);
    

    Array.flat()用于拉平嵌套的数组[推荐-超级好用]

    数组的成员有时还是数组,Array.flat()用于将嵌套的数组“拉平”,变成一维的数组。
    该方法返回一个新数组,对原数据没有影响。
    [1, 2, [3, 4]].flat() 读音【fu la t】
    
    flat()默认只会“拉平”一层,如果想要“拉平”多层的嵌套数组。
    可以将flat()方法的参数写成一个整数,表示想要拉平的层数,默认为1。
    
    [1, 2, [3, [4, 5]]].flat()
    上面代码中,表示想要拉平的层数,默认为1
    // [1, 2, 3, [4, 5]]
    
    [1, 2, [3, [4, 5]]].flat(2)
    上面代码中,flat()的参数为2,表示要“拉平”两层的嵌套数组。
    // [1, 2, 3, 4, 5]
    
    如果不管有多少层嵌套,都要转成一维数组,可以用Infinity关键字作为参数。
    [1, [2, [3]]].flat(Infinity) 
    // [1, 2, 3]
    
    如果原数组有空位,flat()方法会跳过空位。
    [1, 2, , 4, 5].flat()
    // [1, 2, 4, 5]
    

    Array.at()返回对应下标的值[超级好用]

    我们都知道JavaScript不支持数组索引值为负索引。 
    那么想要表示数组的最后一个成员,不能写成arr[-1],只能使用arr[arr.length - 1]。
    
    为了解决负索引这个问题,es6中为数组实例增加了at()方法,接受一个整数作为参数。
    返回对应位置的成员,支持负索引。
    这个方法不仅可用于数组, 也可用于字符串和类型数组( TypedArray)。
    如果参数位置超出了数组范围,at()返回undefined。
    
    const arr = [100, 120, 18, 130, 4];
    console.log(arr.at(1)) //120
    console.log(arr.at(-1)) //4
    console.log(arr.at(-5)) //100
    console.log(arr.at(-6)) //undefined
    

    Array.from() [掌握]

    一个类似数组的对象,Array.from将它转为真正的数组。
    需要注意的是:这个类似数组的对象必须要有length属性才可以,转为数组。
    否者将会转为为一个空数组
    let arrayLike = {
      '0': 'a',
      '1': 'b',
      '2': 'c',
      length: 3
    };
    
    // ES5的写法
    var arr1 = [].slice.call(arrayLike); // ['a', 'b', 'c']
    
    // ES6的写法
    let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']
    
    当没有类似数组的对象没有length属性
    let arrayLike = {
      '0': 'a',
      '1': 'b',
      '2': 'c',
    };
    //此时返回的是一个空数组
    let arr2 = Array.from(arrayLike); // []
    

    Array.of() 了解

    Array.of()方法用于将【一组数值】转换为数组.
    简单的使用:
    const a = Array.of(10, 20, 26, 38);
    console.log(a); // [10, 20, 26, 38]
    
    const b = Array.of(1).length;
    console.log(b);         // 1
    
    Array.of()可以用以下的代码模拟实现:
    function ArrayOf() {
      return [].slice.call(arguments);
    }
    

    Array.includes的使用

    Array.prototype.includes方法返回一个布尔值,表示某个数组是否包含给定的值。
    与字符串的includes方法类似。ES2016 引入了该方法。
    
    简单的使用方法
    const arr = [100, 200, 300];
    console.log(arr.includes('100')) //false
    console.log(arr.includes(100)) //true
    
    没有该方法之前,我们使用数组的indexOf方法,检查是否包含某个值。
    if (arr.indexOf(el) !== -1) {
      // 有这个值
    }
    indexOf方法有两个缺点,一是不够语义化,它的含义是找到参数值的第一个出现位置,
    所以要去比较是否不等于-1,表达起来不够直观。
    二是,它内部使用严格相等运算符(===)进行判断,这会导致对NaN的误判。
    [NaN].indexOf(NaN) // -1
    
    includes使用的是不一样的判断算法,所以没有这个问题。
    [NaN].includes(NaN)
    // true
    

    扩展运算符 (...)

    扩展运算符是三个点(...),
    将一个数组转为用逗号分隔的参数序列。
    console.log(...[1, 2, 3])
    // 1 2 3
    
    console.log(1, ...[2, 3, 4], 5)
    // 1 2 3 4 5
    
    [...document.querySelectorAll('div')]
    // [<div>, <div>, <div>]
    
    let arr1=[11,22,];
    let  arr2=["aa","bb"];
    //  es5的合并
    let arr=arr1.concat(arr2);
    console.log(arr) // [11, 22, "aa", "bb"]
    
    //es6
    let newarr=[...arr1,...arr2]
    console.log(newarr) // [11, 22, 33, 55, "aa", "bb", "cc", "dd"]
    
    // 函数内部有一个对象,arguments可以获取到实参,但是一个伪数组
    //Array[饿 rei]
    function sun(){
      console.log(arguments) 
      //Arguments(8) [1, 2, 3, 4, 5, 6, 7, 9, callee: ƒ, Symbol(Symbol.iterator): ƒ]  他是一个伪数组
    }
    sun(1,2,3,4,5,6,7,9);
    
    
    // 如何将函数内部的伪数组变为真实的数组 方法1
    function sun(){
      let ags=Array.prototype.slice.call(arguments);
      ags.push(150);
      console.log(ags); //[1, 2, 3, 4, 5, 6, 7, 9, 150]
    }
    sun(1,2,3,4,5,6,7,9);
    
    
    // 如何将函数内部的伪数组变为真实的数组 方法2
    function sun(){
      let ags=[...arguments];//将伪数组百年未真实的数组
      ags.push(150);
      console.log(ags); //[1, 2, 3, 4, 5, 6, 7, 9, 150]
    }
    sun(1,2,3,4,5,6,7,9);
    
    //  总结扩展运算符是...   [...变为真实数组的对象]
    

    数组的空位

    数组的空位指的是,数组的某一个位置没有任何值.
    比如Array()构造函数返回的数组都是空位。
    let arr = new Array(3)
    console.log(arr); // [, , ,] 谷歌浏览器中会有出现  [空属性 × 3]
    上面代码中,Array(3)返回一个具有 3 个空位的数组。
    
    ES5 对空位的处理,已经很不一致了,大多数情况下会忽略空位。
    forEach(), filter(), reduce(), every() 和some()都会跳过空位。
    map()会跳过空位,但会保留这个值
    join()和toString()会将空位视为undefined,而undefined和null会被处理成空字符串。
    
    ps:ES6 则是明确将空位转为undefined。
    let arr = new Array(3)
    console.log(arr[0] === undefined); //true
    
    ps:ES6 则是明确将空位转为undefined。
    Array.from()方法会将数组的空位,转为undefined,也就是说,这个方法不会忽略空位。
    Array.from(['a',,'b'])
    // [ "a", undefined, "b" ]
    
    扩展运算符(...)也会将空位转为undefined。
    [...['a',,'b']]
    // [ "a", undefined, "b" ]
    
    new Array(3).fill('a') // ["a","a","a"]
    
    for...of循环也会遍历空位。
    let arr = [, ,];
    for (let i of arr) {
      console.log(1);
    }
    // 1
    // 1
    上面代码中,数组arr有两个空位,for...of并没有忽略它们。
    如果改成map()方法遍历,空位是会跳过的
    
  • 相关阅读:
    [LeetCode] 26. Remove Duplicates from Sorted Array
    [LeetCode] 105. Construct Binary Tree from Preorder and Inorder Traversal
    [LeetCode] 1248. Count Number of Nice Subarrays
    [LeetCode] 37. Sudoku Solver
    [LeetCode] 36. Valid Sudoku
    [LeetCode] 378. Kth Smallest Element in a Sorted Matrix
    [LeetCode] 547. Friend Circles
    [LeetCode] 733. Flood Fill
    [LeetCode] 695. Max Area of Island
    [LeetCode] 994. Rotting Oranges
  • 原文地址:https://www.cnblogs.com/IwishIcould/p/16064137.html
Copyright © 2020-2023  润新知