当前位置:网站首页>es6数组/数组对象求并集、交集、差集、去重、排序
es6数组/数组对象求并集、交集、差集、去重、排序
2022-07-31 05:20:00 【前端备忘录】
数组
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];
- 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]
- 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]
- 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'}];
- 方法一(使用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'}];
- 方法二(使用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]
边栏推荐
猜你喜欢
随机推荐
Pytorch study notes 13 - Basic_RNN
ES6-箭头函数
ES6-数组
DOM-DOM的介绍以及通过方法获取元素
实现离线文件推流成rtsp 2
windows下mysql忘记密码登录,并创建用户
VRchat_udon脚本介绍:傻瓜式教程教你如何实现VRchat地图的功能
JDBC的使用
VNC 启动脚本
对van-notice-bar组件定义内容进行设置
Webrtc从理论到实践三:角色
ES6-对象
多线程(1)
力扣刷题之排序链表
Pytorch learning notes 09 - multiple classification problem
Wlan实验(ENSP)
力扣.字母异位词分组
Oracle入门 03 - Linux / Unix 系统基础知识
Unity Text一个简单的输入特效
滴滴被罚超80亿!收集并泄露1.07亿条乘客人脸识别信息