数组

将伪数组转换成真数组
  [].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"))
原文地址:https://www.cnblogs.com/lianqing/p/9079080.html