zoukankan      html  css  js  c++  java
  • 数组

    数组

    1.哪些数组操作返回新数组

    1.1返回新数组,不影响数组

    • map
    • flat,flatMap
    • filter
    • slice
    • concat

    1.2返回修改后的,影响原数组

    • fill
    • sort
    • reverse
    • splice
    • push,pop,unshift,shift
    • copyWithin

    2.map(重构)

    /**
     * @msg: 把每个元素都重构一边,需要return新结构
     * @param {Function} function(item,index,arr){return~}/函数名(需要定义好了)
     * @param this(可以被上面的回调使用)
     * @return {*} 返回新数组,不会对原来造成影响
    */  
    array.map();
    
    nodeNames: this.defaultNodeList.map(item => item.nodeName)
    

    3.flat(多维变一维)

    /**
     * @msg: 二维数组变成一维数组
     * @param {Number} n flat()默认只会“拉平”一层,n=1
     * @return 该方法返回一个新数组,对原数据没有影响
    */  
    array.flat(n)
    [1,2,3,[4,[5,6]]].flat(1)//[1,2,3,4,[5,6]]
    [1, [2, [3]]].flat(Infinity)// [1, 2, 3],多少层都被拉平
    [1, 2, , 4, 5].flat()// [1, 2, 4, 5],flat会跳过空位
    

    3.1flatMap(变成一维前先map)

    /**
     * @msg: 对数组进行过滤,每个元素都要经过条件的筛选,true则保留。
     *创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素
     * @param {Function} function(item,index,arr){return~}/函数名(需要定义好了)
     * @param this(可以被上面的回调使用)
      *@return 返回新数组,不改变原数组。
    */  
    arr.flatMap(function callback(currentValue[, index[, array]]) {
      // ...
    }[, thisArg])
    

    4.filter(过滤)

    /**
     * @msg: 对数组进行过滤,每个元素都要经过条件的筛选,true则保留。
     *创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素
     * @param {Function} function(item,index,arr){return~}/函数名(需要定义好了)
     * @param this(可以被上面的回调使用)
     * @param this(可以被上面的回调使用)return 该方法返回一个新数组,对原数据没有影响
      *@return 过滤后的新数组
    */  
    array.filter
    例子:饿了么UI--input--远程搜索
    <el-autocomplete
      v-model="state"
      :fetch-suggestions="querySearchAsync"
      placeholder="请输入内容"
      @select="handleSelect"
    ></el-autocomplete>
     querySearchAsync(queryString, cb) {
            var restaurants = this.restaurants;
            var results = queryString ? restaurants.filter(this.createStateFilter(queryString)) : restaurants;
            
            clearTimeout(this.timeout);
            this.timeout = setTimeout(() => {
              cb(results);
            }, 3000 * Math.random());
          },
    createStateFilter(queryString) {
            return (state) => {
              return (state.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0);
            };
          },
    
    

    5.slice(数组/字符串)

    /**
     * @msg: 截取
     * @param start 开始,可谓正,可为负
     * @param end? 结束 若参数为负,表示倒数第几个,-1是最后一个;若为正数,表示截取到end-1
     *@return 过滤后的新数组
    */  
    array.slice(start,end) 
    ["a","b","c"].slice(0,1) //"a"
    

    6.some(判断数组)

    /**
     * @msg: 遍历检查数组是否符合条件,有一项为true,就返回true
     * @param {Function} function(item,index,arr){return item >=15}/函数名(需要定义好了)
     * @param this(可以被上面的回调使用)return 该方法返回一个新数组,对原数据没有影响
      *@return {Boolean} true/false
    */  
    array.some((item,index)=>{
        return item>16//有一项满足>16,就返回true;
    })
    

    7.concat(连接)

    /**
     * @msg: 连接数组
     * @param 具体的值或者数组,可以多个参数
     *@return 返回连接的新数组,不会影响原数组,浅拷贝
    */  
    [].concat(array2,array3,...,arrayX)//该参数可以是具体的值,也可以是数组对象
    ["a"].concat(["b"],"c")//["a","b","c"]
    
    

    8.find (找到符合条件的指定值)

    /**
     * @msg: find() 方法返回通过测试(函数内判断)的数组的第一个元素的值。
     * @param {Function} function(item,index,arr){return~}/函数名(需要定义好了)
     * @param this(可以被上面的回调使用)
     *@return 返回连接的新数组,不会影响原数组,浅拷贝
    */  
    array.find(function(currentValue, index, arr), this)
    [1,2,3,4].find((item=>item===4))//4
    

    8.1findIndex(找到符合条件的指定值第一个索引)

    /**
     * @msg: find() 方法返回通过测试(函数内判断)的数组的第一个元素的索引。
     * @param {Function} function(item,index,arr){return~}/函数名(需要定义好了)
     * @param this(可以被上面的回调使用)
     *@return 返回连接的新数组,不会影响原数组,浅拷贝
    */  
    array.find(function(currentValue, index, arr), this)
    [1,2,3,4].findIndex((item=>item===4))//3
    

    9.every(所有元素都要符合条件)

    /**
     * @msg: 遍历检查数组是否符合条件,所有项都符合条件,就返回true。否则为false
     * @param {Function} function(item,index,arr){return item >=15}/函数名(需要定义好了)
     * @param this(可以被上面的回调使用)return 该方法返回一个新数组,对原数据没有影响
      *@return {Boolean} true/false
    */  
    array.every((item,index)=>{
        return item>16//每一项都满足>16,就返回true
    })
    

    10.forEach(遍历)

    /**
     * @msg: 遍历检查数组是否符合条件,所有项都符合条件,就返回true。否则为false
     * @param {Function} function(item,index,arr){}/函数名(需要定义好了)
     * @param this(可以被上面的回调使用)return 该方法返回一个新数组,对原数据没有影响
      *@return {Undefined} undefined
    */  
    array.forEach((item,index)=>{
    
    })
    注意:forEach() 本身是不支持的 continue 与 break 语句的,用return实现continue,用every和some实现break
    

    11.fill(填充)

    /**
     * @msg: 指定数组的哪个位置开始填充数据,如果填充的是数组和对象,注意填充的每一项都指向同一个引用
     * @param {any} value 必需
     * @param {Number} start 开始的位置 可选 (默认为0)
     * @param {Number} end 最终的位置,实际上是end-1 可选(默认是数组的长度)
      *@return {Array} 数组 ,改变原来的数组
    */  
    array.fill(value,start,end)
    [1,2,3].fill(4)//[4,4,4]
    

    12.includes(包含)

    /**
     * @msg: 判断数组是否包含哪个值
     * @param {any} value 必需
      *@return {Boolean} true/false 包含返回true
    */ 
    arr.includes(searchElement)
    [1, 2, NaN].includes(NaN) // true,indexOf判断不了NaN
    

    12.1indexOf(指定值的第一个索引)

    /**
     * @msg: indexOf() 方法可返回数组中某个指定的元素的第一个位置(索引)
     * @param {any} searchElement 必需
     * @param {any} start 可选,指定从哪里开始搜索
      *@return {Number} n 不存在返回-1
    */ 
    arr.indexOf(searchElement,start)
    [1,2,3,4,NaN].indexOf(NaN) -1
    

    12.2lastIndexOf(指定值所在的最后一个索引)

    /**
     * @msg: lastIndexOf() 方法可返回一个指定的元素在数组中最后出现的位置,从该字符串的后面向前查找。
     * @param {any} searchElement 必需
     * @param {any} start 可选,指定从哪里开始搜索,但是是从后面开始找
      *@return {Number} n 不存在返回-1
    */ 
    arr.lastIndexof(searchElement,start)
    [1,2,3,4,NaN].lastIndexof(NaN) -1
    

    13.isArray(判断是否为数组)

    /**
     * @msg:判断是否为数组
     * @param {any} value 必需
      *@return {Boolean} true/false
    */ 
    Array.isArray(params)
    
    

    14.join(创建字符串)

    /**
     * @msg:取出数组中所有元素创建一个字符串,注意二维数组,同toString()
     * @param {any} separator  可选。指定要使用的分隔符。如果省略该参数,则使用逗号作为分隔符。
      *@return {String} 字符串
    */ 
    [1,[2,3],4,5].join()//1,2,3,4,5 
    
    

    14.1暴力创建

    [1,[2],23,3].toString()//1,2,23,3
    

    15.sort(排序)

    /**
     * @msg:ES2019 明确规定,Array.prototype.sort()的默认排序算法必须稳定。
     * @param {Function} compareFunction  可选。指定要排序的算法。如果不指定,该方法的默认排序算法是先将元素转换为字符串,再将其转换为UTF-16代码,根据元素的UTF-16代码的顺序排序。
      *@return {Array} 排序后的数组,改变了原数组
    */ 
    ["80","9","1"].sort()
    [1,5,3,60,15].sort()//结果不是[1,3,5,15,60],而是[1, 15, 3, 5, 60]
    const a=[1,5,3,6];
     a.sort((a,b)=>{
                 return a-b//升序
    })
    

    15.1 reverse(颠倒,跟sort一致)

    /**
     * @msg:颠倒数组的顺序
     *@return {Array} 排序后的数组,改变了原数组
    */ 
    ["80","9","1"].reverse()//["1","9","80"]
    

    16.slice截取

    /**
     * @msg:截取对应位置的数组元素
     * @param {Number}start 截取的开始位置,如果为负数,-1表示倒数第一个的位置,从-1的位置开始截取
    * @param  {Number}end 截取的最后位置 实际是end-1,也可为负数,记得end-1
      *@return {Array}返回截取后的新数组,不会影响原数组
    */ 
    [1,2,3,4].slice(0,2)//[1,2]
    

    17.增删改,查

    功能 描述
    push array.push(item1, item2, ..., itemX)向数组末尾位置添加一个或者多个元素,并返回新的长度
    unshift array.unshift(item1*, item2, ..., itemX)向数组起始位置添加一个或者多个元素,并返回新的长度
    pop 删除数组的最后一个元素并返回删除的元素。
    shift 数组的第一个元素从其中删除,并返回第一个元素的值。
    splice 添加或删除数组中的元素。如果仅删除一个元素,则返回一个元素的数组。 如果未删除任何元素,则返回空数组。改变原来的数组 array.splice(index,howmany,item1,.....,itemX) index是删除/添加的起始位置,howmany表示要删除多少个,itemX都是要添加的

    18.copyWithin(任意调整内部位置)

    /**
     * @msg:截取对应位置的数组元素
     * @param {Number}target 必须  从哪个位置开始粘贴
    * @param  {Number}start 可选 复制的开始,可为负数
      * @param {Number}end 可选 停止复制的索引位置 (默认为 array.length),可为负数
        *@return {Array}返回新数组,影响原数组
    */ 
    array.copyWithin(target, start, end)
    [1,2,3,4].copyWithin(1,2,3)//[1,3,3,4]
    

    19.Array.from(转换成数组)

    /**
     * @msg:将具有迭代器接口的数据结构(arguments,set,map,string,nodeList,array,typedArray)或者类似数组的对象(本质特征只有一点,即必须有length属性。)转换成数组
     * @param {Object}object 需要转换的数据结构
    * @param  {Function}mapFunction(item,index){ return item} 可选 对每个元素进行map操作
      * @param {any}this对象 可选 映射到mapFunction的this对象(不能自定义的)
      *@return {Array}返回新数组
    */ 
    Array.from(object, mapFunction, thisValue)
    例子1:let arrayLike = {
        '0': 'a',
        '1': 'b',
        '2': 'c',
        length: 3
    };
    (ES5)[].slice.call(arrayLike)=== Array.from(arrayLike)
    例子2:
    将字符串转为数组,然后返回字符串的长度。因为它能正确处理各种 Unicode 字符,可以避免 JavaScript 将大于uFFFF的 Unicode 字符,算作两个字符的 bug。
    对比:
    扩展运算符只对有迭代器接口的数据结构
    

    20.entries(),keys() 和 values() 返回遍历器

    Array.entries()//返回键值对的遍迭代器历的迭代器
    Array.keys()//返回键的遍历的迭代器
    Array.values()//返回对键值的遍历的迭代器
    使用for-of遍历迭代器
    for (let [index, elem] of ['a', 'b'].entries()) {
      console.log(index, elem);//key:value
    }
    // 0 "a"
    // 1 "b"
    for(let key of ["a","b"].keys()){console.log(key)}//0,1
    

    21 reduce

    /**
     * @msg:接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
    * @param  {Function}function(total, currentValue[, currentIndex[, arr]){ return 表达式} 
      * @param {any}initialValue 传递给函数的初始值
      *@return {any}返回计算结果
    */ 
    
    array.reduce(function(total, currentValue[, currentIndex[, arr]]), initialValue)
    

    22 reduceRight

    reduceRight() 方法的功能和 reduce() 功能是一样的,不同的是 reduceRight() 从数组的末尾向前将数组中的数组项做累加。
    
  • 相关阅读:
    nginx 配置详解
    ngnix 负载均衡
    nginx 安装搭建与配置介绍
    11.15java实习生面试总结
    笔试题:编写一个用户注册接口
    java第一次笔试+面试总结
    《啊哈算法》读后总结(下)
    java常见排序算法
    Tomcat安装及配置教程
    算法题:购买n个苹果,苹果6个一袋或者8个一袋,若想袋数最少,如何购买?
  • 原文地址:https://www.cnblogs.com/listenMao/p/14117337.html
Copyright © 2011-2022 走看看