zoukankan      html  css  js  c++  java
  • 数组

    将伪数组转换成真数组
      [].slice.call()
      [].slice.apply()
      Array.from():将伪数组转换为数组

      Array.prototype.slice.call();

      Array.prototype.slice.apply();

      el.__proto__=Array.prototype

      建立一个数组空间 将伪数租的量遍历进去

      扩展:

        辨识类型:

          判断一个对象是不是另外一个对象创建出来的

            el instanceof Array

            el.constructor==Array

          检测一个复杂数据类型是一个什么样的类型

            Object.prototype.toString.call():

          

    将一组数值转换为数组
      Array.of():将一组数值转换为数组
      split('')

    for in遍历的是数组的索引,而for of遍历的是数组元素值。

      

    数组去重的几种方式:

      1.新增一个数组利用indexOf/lastIndexOf方法:

    var arr=[2,3,2,6,8,6]
    var n=[]
    for(var i in arr){
        if(n.indexOf(arr[i])==-1){
            n.push(arr[i])
        }
    }
    console.log(n) //(4) [2, 3, 6, 8]
    for(var i in arr){
        if(n.lastIndexOf(arr[i])==-1){
            n.push(arr[i])
        }
    }
    console.log(n) //(4) [3, 2, 8, 6]  //返回最后一次出现的下标  如果不存在返回值是-1

     2.利用indexOf

    var arr=[2,3,2,6,8,6]
    var n=[]  
    for(var i in arr){
        if(arr.indexOf(arr[i])!=i){
            arr.splice(i,1)
        }
    }
    //(4) [2, 3, 6, 8] for(var i in arr){ if(arr.lastIndexOf(arr[i])!=i){ arr.splice(i,1) } } //(4) [3, 2, 8, 6]
    console.log(n)

    3.进行两次循环去重

    var arr=[2,3,2,6,8,6]for(var i=0;i<arr.length;i++){
        for(var j=i+1;j<arr.length;j++){
            if(arr[i]==arr[j]){
                arr.splice(j,1)
            }
        }
    }  //(4) [2, 3, 6, 8]
    console.log(n)

     4.利用对象 和 数组

    var arr=[2,3,2,6,8,6]
    var n=[]
    var m={}
    for(var i in arr){
        if(!m[arr[i]]){
            m[arr[i]]=true
            n.push(arr[i])
        }
    }
    console.log(n)

     5.利用ES5新增方法去重

      filter:与indexOf lastIndexOf  

    var arr=[2,3,2,6,8,6]
    r=arr.filter(function(val,index,array){
        return array.lastIndexOf(val)==index
    }) 
    console.log(r) //(4) [3, 2, 8, 6]
    r=arr.filter(function(val,index,array){
        return array.indexOf(val)==index
    })  
    console.log(r)//(4) [2, 3, 6, 8]

      forEach/filte/map 遍历能力与 includes  indexOf  lastIndexOf

      includes为ES7方法 返回的是布尔类型

    所以在if条件判断的时候includes要简单得多,而indexOf 需要多写一个条件进行判断。
    如果数组中有NaN,你又正好需要判断数组是否有存在NaN,这时你使用indexOf是无法判断的,你必须使用includes这个方法。
    当数组的有空的值的时候,includes会认为空的值是undefined,而indexOf不会。

    var arr=[2,3,2,6,8,6]
    var n=[]  
    arr.forEach(function(val){
        if(!n.includes(val)){
            n.push(val)
        }
    })  
    console.log(n)  //(4) [2, 3, 6, 8]

    6.es6 新增方法去重

    var arr=[2,3,2,6,8,6]
    console.log(Array.from(new Set(arr)))

     7.数组里面对象重复相加

    let arry=[
        {Code:'x',Quantity:1,ItemType:'normal'},
        {Code:'x',Quantity:2,ItemType:'normal'},
        {Code:'x',Quantity:5,ItemType:'normal'},
        {Code:'y',Quantity:1,ItemType:'spec'},
        {Code:'y',Quantity:2,ItemType:'spec'},
        {Code:'z',Quantity:1,ItemType:'normal'},
        ]
        function repeatAdd(arry,key,result) {
                let newfood=[];
                var temp = {};
                for(var i in arry) {
                    var key1= arry[i][key];
                    if(temp[key1]) {
                        temp[key1][result] = temp[key1][result]+ arry[i][result];
                    } else {
                        temp[key1]=arry[i]
                    }
                }
              for(var k in temp){
                 newfood.push(temp[k])
                  }
                return newfood
            }
          console.log(repeatAdd(arry,"Code","Quantity"))
  • 相关阅读:
    android Camera 如何判断当前使用的摄像头是前置还是后置
    Unity3D中调用外接摄像头,并保存为图片文件
    Android Camera 使用小结
    Android开发之初识Camera图像采集
    android studio 常用快捷键
    Windows下虚拟机安装Mac OS X —– VM12安装Mac OS X 10.11
    unity调android ios 浏览器 uniwebview2.1使用
    unity语言本地化插件 I2 Location2.5.6使用简单记录
    Unity中内嵌网页插件UniWebView使用总结
    ugui mask失效
  • 原文地址:https://www.cnblogs.com/lianqing/p/9079080.html
Copyright © 2011-2022 走看看