es6数组/数组对象求并集、交集、差集、去重、排序

数组

1. 数组合并(并集+去重)

let a = new Set([6,3,7,5]);
let b = new Set([3,4,5,6,8]);
let arr = Array.from(new Set([...a, ...b]));
console.log('arr',arr); //[6, 3, 7, 5, 4, 8]

2. 数组求交集

let a = new Set([6,3,7,5]);
let b = new Set([3,4,5,6,8]);
let arr = Array.from(new Set([...b].filter(x => a.has(x))));
console.log(arr); //[3, 5, 6]

3. 数组求差集

let a = new Set([6,3,7,5]);
let b = new Set([3,4,5,6,8]);
let arr = Array.from(new Set([...b].filter(x => !a.has(x))));
console.log(arr); //[4, 8]

4. 数组去重

let arr = [1,5,4,2,3,5,2,1,8,9,3,4];
  1. reduce去重
// indexOf()判断数组第一次出现的下标
let newArr = arr.reduce((cur, next)=> {
    
    
cur.indexOf(next) === -1 && cur.push(next);
return cur;
},[]);
console.log(arr); //[1, 5, 4, 2, 3, 8, 9]
  1. set与解构赋值去重
// indexOf()判断数组第一次出现的下标
function unique(arr) {
    
    
    if (!Array.isArray(arr)) {
    
    
        console.log('type error!')
        return
    }
    return [...new Set(arr)]
}
console.log(unique(arr)); //[1, 5, 4, 2, 3, 8, 9]
  1. Array.from与set去重
// indexOf()判断数组第一次出现的下标
function unique(arr) {
    
    
    if (!Array.isArray(arr)) {
    
    
        console.log('type error!')
        return
    }
    return Array.from(new Set(arr))
}
console.log(unique(arr)); //[1, 5, 4, 2, 3, 8, 9]

数组对象

1. 数组对象求交集

let a= [{
    
    id:'111',name:'a1'},{
    
    id:'222',name:'a2'}];
let b = [{
    
    id:'111',name:'b1'},{
    
    id:'222',name:'b2'},{
    
    id:'333',name:'b3'}];
let arr1 = [...b].filter(x => [...a].some(y => y.id === x.id));
console.log(arr1); //[{id:'111',name:'b1'},{id:'222',name:'b2'}]

let arr2 = [...a].filter(x => [...b].some(y => y.id === x.id));
console.log(arr2); //[{id:'111',name:'a1'},{id:'222',name:'a2'}]

2. 数组对象求差集

let a= [{
    
    id:'111',name:'a1'},{
    
    id:'222',name:'a2'}];
let b = [{
    
    id:'111',name:'b1'},{
    
    id:'222',name:'b2'},{
    
    id:'333',name:'b3'}];
let arr1 = [...b].filter(x => [...a].every(y => y.id !== x.id));
console.log(arr1); //[{id:'333',name:'b3'}]

let arr2 = [...a].filter(x => [...b].every(y => y.id !== x.id));
console.log(arr2); //[]

3. 数组对象去重

let arr = [{
    
    id:'111',name:'a1'},{
    
    id:'222',name:'a2'},{
    
    id:'111',name:'b1'},{
    
    id:'222',name:'b2'},{
    
    id:'333',name:'b3'}];
  1. 方法一(使用filter,test:数组)
function dropFilter(test) {
    
    
  // ele:当前元素的值,index:当前元素的索引值,arr:原数组
  return test.filter((ele,index,arr)=>{
    
    
  // 通过索引筛掉相同的项 id为对象中唯一值
   return arr.findIndex(item=>item.id===ele.id) === index
  })
}
dropFilter(arr);
//[{id:'111',name:'a1'},{id:'222',name:'a2'},{id:'333',name:'b3'}];
  1. 方法二(使用reduce,list:数组)
dropReduce(list) {
    
    
  // 定义一个空对象,利用对象的键的唯一进行去重
  let obj = {
    
    }
  // 去重(cur:init默认list,next:数组子项,index:表示当前正在处理的数组元素的索引,arr:表示原数组) id为对象中唯一值
  return list.reduce((cur,next,index,arr) => {
    
    
  obj[next.id]?"":obj[next.id]=true && cur.push(next)
    return cur
  }, [])
}
dropReduce(arr)
//[{id:'111',name:'a1'},{id:'222',name:'a2'},{id:'333',name:'b3'}];

数组排序

1. sort排序

let arr = [2,6,4,1,3,7,6,5];
arr.sort(function(a,b){
    
     return a-b; })
console.log(arr);// [1, 2, 3, 4, 5, 6, 6, 7]

arr.sort(function(a,b){
    
     return a-b; })
console.log(arr);// [7, 6, 6, 5, 4, 3, 2, 1]

2. 冒泡排序(以从小到大为例)

let arr = [2,6,4,1,3,7,6,5];
function fn(arr){
    
    
    for(var i=0;i<arr.length-1;i++){
    
     //控制比较的轮数
        for(var j=0;j<arr.length-1-i;j++){
    
     //内层每轮比较的次数
            if(arr[j]>arr[j+1]){
    
      
                var temp=arr[j];  //交换这两个值的位置
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            }
        }
    }
    return arr;
} 
console.log(fn(arr));// [1, 2, 3, 4, 5, 6, 6, 7]

2. 选择排序

let arr = [2,6,4,1,3,7,6,5];
function fn(arr){
    
     //选择排序
    //用这个数分别和别的数相比较,改变的是索引的位置,每轮结束后才交换为位置
    for(var i=0;i<arr.length-1;i++){
    
      //控制外层比较的轮数
        var minIndex=i;  //先假定一个最小值,定义变量minIndex指向该值的索引
        for(var j=i+1;j<arr.length;j++){
    
    
            if(arr[minIndex]>arr[j]){
    
    
                minIndex=j;  //改变最小索引的指向
            }
        }
        var temp=arr[i];   //每轮比较结束,将最初假定的最小值和实际最小值交换
        arr[i]=arr[minIndex];
        arr[minIndex]=temp;
    }
    return arr;  //将排序后的数组返回
} 
console.log(fn(arr));// [1, 2, 3, 4, 5, 6, 6, 7]

猜你喜欢

转载自blog.csdn.net/baidu_39009276/article/details/125593142