数组去重
let arr = [...new Set(arr)]
console.log(arr)
let arr = reduce((total,item)=>{
return total.includes(item) ? totla : total.concat(item)
},[])
var resArr = array.filter(function(item,index,arr){
return index == arr.indexOf(item)
})
console.log(resArr)
function unique(arr){
var item;
var newArr = []
var newObj = []
for(var i = 0;i<arr.length;i++){
item = arr[i]
if(!newObj[item]){
newObj[item] = item
newArr.push(item)
}
}
return newArr
}
function unique(arr){
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)
j-- //因为数组长度减小1,所以直接 j++ 会漏掉一个元素,所以要 j--
}
}
}
return arr
}
数组对象去重
function distinct(arr,key){ // key -> "id", key is string
let map = new Map()
for (const item of arr) {
if(!map.has(item[key])){
map.set(item[key],item)
}
}
return [...map.values()]
}
function distinct(arr,key){ // key -> "id", key is string
let temp = {}
let resarr = arr.reduce((totla,item)=>{
if(!temp[item[key]]){
temp[item[key]] = item[key]
totla.push(item)
}
return totla
},[])
return resarr
}
function distinct(arr,key){ // key -> "id", key is string
var newobj = {},newarr = []
for(var i = 0;i<arr.length;i++){
var item = arr[i]
if(!newobj[item[key]]){
newobj[item[key]] = newarr.push(item)
}
}
return newarr
}
function distinct(arr, key) { // key -> "id", key is string
for (var i = 0; i < arr.length - 1; i++) {
for (var j = i + 1; j < arr.length; j++) {
if (arr[i][key] == arr[j][key]) {
arr.splice(j, 1)
j--
}
}
}
return arr
}
数组降维
flat会存在兼容问题
-
二维数组
let arr = [[1, 2, 3], [2, 3, 4], [2, 5, 7]] var res1 = arr.flat()
let arr = [[1, 2, 3], [2, 3, 4], [2, 5, 7]] var res2 = arr.reduce((total, item) => { return total.concat(item) }, []) -
多维数组
let arr = [[1, 2, 3], [2, [4, 5, [3, 6]]], [2, [8, 9]]] let res = function (arr) { return arr.reduce((total, item) => { return total.concat( Array.isArray(item) ? res(item) : item ); }, []); } console.log(res(arr));
let arr = [[1, 2, 3], [2, [4, 5, [3, 6]]], [2, [8, 9]]] let res4 = arr.flat(Infinity) console.log(res4);