将伪数组转换成真数组
[].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"))