zoukankan      html  css  js  c++  java
  • 数组---基本方法---去重数据(随笔最后)

    1.向数组添加数据

    // push()向数据末尾添加数据,并返回添加数据后的数组的长度
    var arr = [1,2,3]
    console.log(arr.push(4), arr)//4 [ 1, 2, 3, 4 ]
    //unshift()向数据起始位置添加数据,并返回添加数据后的数组的长度 var arr = [1,2,3] console.log(arr.unshift(4), arr)//4 [ 4, 1, 2, 3 ]

    2.删除数组元素

    // pop()方法删除数组的最后一个元素,并返回删除的元素
    var arr = [1,2,23,454]
    console.log(arr.pop(), arr)//454 [ 1, 2, 23 ]
    // shift()方法删除数组的第一个元素,并返回删除的元素 var arr = [23,434,54] console.log(arr.shift(), arr)//23 [ 434, 54 ]

    3.截取数组

    // slice()截取数组,截取的值不会在数组消失
    //注意下标从0开始,截取的极值不包括开始(2),包括结尾(4)
    var arr = [1,2,3,4,5,6]
    console.log(arr.slice(2,4))//[ 3, 4 ]
    // splice()截取数组,截取的值会在原数组消失,第一个参数值是哪位开始,第二个参数值是截取的长度 var arr = [1,2,3,4,5,6] console.log(arr.splice(2,4), arr)//[ 3, 4, 5, 6 ] [ 1, 2 ]

    4.对数组的元素进行运算

    let arr=[1,23,45]
    console.log(arr.reduce((a,b)=>a+b))//69
    console.log(arr.reduce((a,b)=>a*b))//1035

    5.颠倒数组元素的排序

    // reverse()会颠倒数组元素的顺序
    let arr = [1,2,3]
    console.log(arr.reverse())//[3,2,1]

    6.合并数组

    //concat()合并两个数组
    var con1=[1,3,5,6]
    var con2=[23,535,65]
    console.log(con1.concat(con2))

    7.ascii码排序

    // sort()默认情况下sort方法是按ascii字母顺序排序的
    let daoxu=[32,4,76,54,7]
    console.log(daoxu.sort())//[ 76, 7, 54, 4, 32 ]

    8.自然数排序

    //封装数组排序函数
    //包装有参函数,a,b;a-b正序,a+b倒序
    function sortby(a,b){
    return a+b;
    }
    let a=[1,4,5,3,2,8]
    console.log(a.sort(sortby))//[ 8, 2, 3, 5, 4, 1 ]

    9.检查元素是否存在数组内

    // 数组的indexOf
    let index=[1,24,56,7,8]
    console.log(index.indexOf(56))//2所要检查元素在数组的位置
    console.log(index.indexOf(10))//-1 所检查的元素如果不在数组范围里,则返回-1
    //includes有此值,返回true,反之false==推荐 console.log(index.includes(1))

    10.数组元素分割字符串

    // join()方法,把数组的所有元素放入一个字符串,,也可以以自定义字符分割
    let arr=[123,4,546]
    console.log(typeof(arr.join()),arr.join())//string//123,4,546
    console.log(arr.join("|"))//123|4|546

    11.数组转换为字符串

    //toString()把数组转换为字符串,并返回结果。
    let arr = [12,334,543,43]
    console.log(arr.toString(), typeof(arr.toString()))

    12.检测对象是否为数组

    // instanceof 用于判断一个变量是否某个对象的实例,
    // obj(检测的对象) instanceof cons(构造函数) 
    // instanceof 运算符用来检测 cons.prototype 是否存在于参数 obj 的原型链上。
    let arr = [1,23,5,4]
    console.log(arr instanceof Object)//true //Array也是Object的子类
    console.log(arr instanceof Array)//true
    // Array.isArray()方法用于判断一个对象是否为数组 console.log(Array.isArray([]))//true console.log(Array.isArray([1]))//true console.log(Array.isArray(true))//false

    13.取数组最大值

    Math.max.apply(null,[1,2,3,4,5,6])

    14.已知一个值,拿在数组对应的下标

    //lastIndexOf(),已知一个值,拿到在数组对应的下标
    let arr = [23,24,2,53]
    console.log(arr.lastIndexOf(2))

    15.map

    //map(),依次向函数中传入数组的数据,并把每次的返回结果组成一个新的数组,
    //elem当前的数据,index,当前数据的下标,arr,数组本身。
    let arr=[1, 2, 3].map(function(elem, index, arr) {
    console.log(elem,index,arr)
    //1 0 [ 1, 2, 3 ]
    //2 1 [ 1, 2, 3 ]
    //3 2 [ 1, 2, 3 ]
    return elem * index;
    });
    console.log(arr)//[ 0, 2, 6 ]

    16.filter

      a.去除数组内为false的元素

     let arr = [1,414,4,324,5,"",0,null,undefined,"r2r"]
     console.log(arr.filter(item => item)) //此方法可以去除数组内空字符串、null、undefined、0,

    b.去除数组内重复的元素→不推荐,这应该是倒数第二慢的方法,倒数第一,大家都懂的

    let arr = [1, 2, 2, 3, 4324, 43253, "a", "a", "c", 55,534,63];
    console.log(arr.filter((item, index, self) => self.indexOf(item) ===index))

      c.去除数组内不符合条件的

    let arr = [1,2,3,4,5,6,6,78,8]
    console.log(arr.filter(item => item >10))//78

     17.数组去重

      a. 定义两个数组

    let arr = Array.from(new Array(100000), (item, index) => {
        return index
    })
    
    let arr2 = Array.from(new Array(100000), (item, index) => {
        return index + index
    })

      b. filter + indexOf      16706ms,双重for循环就不用说了

    
    let start = new Date().getTime()
    function dist(a, b){ let arr = a.concat(b) return arr.filter((item, index, self) => self.indexOf(item) === index) } dist(arr, arr2)
    let end
    = new Date().getTime() console.log(end-start)

      c. es6 → Set  22-28ms

    let start = new Date().getTime()
    
    function dist3(a, b){
        return Array.from(new Set([...a,...b]))
    }
    dist3(arr, arr2)
    
    let end = new Date().getTime()
    console.log(end-start)

      d. for + of   22-28ms

    let arr3 = ['1', 1, '1', 2], result=[], obj = {}
    let start = new Date().getTime()
    
    function dist2(a, b){
        let arr = a.concat(b)
        //['1',1,'1'] '1' == 1
        for(let i  of arr){
            if(!obj[i]){
                result.push(i)
                obj[i] = 1
            }
        }
        console.log(result)
    }
    dist2(arr, arr2)
    
    let end = new Date().getTime()
    console.log(end-start)
  • 相关阅读:
    2019 SDN阅读作业
    2019 SDN上机第3次作业
    SDN实验2
    SDN
    说好不肝---第五次作业
    [2020BUAA软工助教]助教每周小结(week 8)
    [2020BUAA软工助教]助教每周小结(week 7)
    [2020BUAA软工助教]助教每周小结(week 6)
    [2020BUAA软工助教]助教每周小结(week 5)
    [2020BUAA软工助教]助教每周小结(week 4)
  • 原文地址:https://www.cnblogs.com/naturl/p/9564071.html
Copyright © 2011-2022 走看看