首页 > 其他分享 >普通数组以及数组对象去重的方法

普通数组以及数组对象去重的方法

时间:2024-03-25 22:29:51浏览次数:18  
标签:name 对象 item 普通 let 数组 array id

在JavaScript中,有多种方法可以实现数组去重:

使用Set:Set是ES6中新增的数据结构,它类似于数组,但是成员的值都是唯一的,没有重复的值。

let array = [1, 2, 3, 4, 4, 5, 5];
let uniqueArray = [...new Set(array)];

使用filter:filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。

let array = [1, 2, 3, 4, 4, 5, 5];
let uniqueArray = array.filter((value, index, self) => {
    return self.indexOf(value) === index;
});

使用reduce:reduce() 方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。

let array = [1, 2, 3, 4, 4, 5, 5];
let uniqueArray = array.reduce((prev, cur) => prev.includes(cur) ? prev : [...prev, cur], []);

数组对象:

在JavaScript中,如果你有一个包含对象的数组,并且你想根据对象的某个属性进行去重,你可以使用reduce方法。以下是一个例子:

let array = [
    { id: 1, name: 'Alice' },
    { id: 2, name: 'Bob' },
    { id: 1, name: 'Alice' }
];

let uniqueArray = array.reduce((prev, cur) => {
    let exists = prev.find(item => item.id === cur.id);
    if (!exists) {
        return prev.concat([cur]);
    } else {
        return prev;
    }
}, []);

console.log(uniqueArray);

在这个例子中,我们使用reduce方法遍历数组,对于每个元素,我们检查它是否已经存在于新数组中。如果不存在,我们就将它添加到新数组中。最后,我们得到的新数组就是去重后的数组。

使用 Map 对象:

let array = [
    { id: 1, name: 'Alice' },
    { id: 2, name: 'Bob' },
    { id: 1, name: 'Alice' }
];

let map = new Map();
for (let item of array) {
    if (!map.has(item.id)) {
        map.set(item.id, item);
    }
}
let uniqueArray = Array.from(map.values());

console.log(uniqueArray);

使用 filter 和 map 方法:

let array = [
    { id: 1, name: 'Alice' },
    { id: 2, name: 'Bob' },
    { id: 1, name: 'Alice' }
];

let idArray = array.map(item => item.id);
let uniqueArray = array.filter((item, index) => {
    return idArray.indexOf(item.id) === index;
});

console.log(uniqueArray);

标签:name,对象,item,普通,let,数组,array,id
From: https://blog.csdn.net/weixin_43867229/article/details/137027855

相关文章

  • springboot关于bean对象的管理
    Bean的扫描@springbootApplication注释,本质上是一个组合注解,其中组合了@ComponentScan注解,默认只能扫描启动类所在的包以及子包 如果要注册的bean对象来自于第三方(不是自定义的),是无法用@Component及衍生注解声明bean的可以用@Bean注释注入三方bean对象publicstatic......
  • 蓝桥杯算法基础(29)字符串匹配(RabinKarp)(KMP)(前缀树,字典树,trie,后缀数组,高度数组)
     RabinKarpRabinKarpS:ABABABm个P:ABBn个1.朴素算法,挨个匹配2.哈希法hash->滚动哈希c0*31^2+c1*31^1+c2类似于进制的求法求hash值(c0*31+c1)*31+c2hash(p)=o(n)hash(s)=o(m*n)privatestaticvoidmatch(Stringp,Strings){longhash_p=hash(p);......
  • JAVA面向对象高级三:泛型方法,泛型的通配符和泛型的上下限,泛型注意事项
         上限技术: 下限技术:   ......
  • 代码随想录第六天: 哈希表(数组+HashSet+HashMap)
    语言:Java参考资料:代码随想录、ChatGPT3.5当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。但是哈希法也是牺牲了空间换取了时间,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速的查找。如果在做面试题目的时候遇到需要判断一个......
  • JAVA面向对象高级三:枚举类认识 枚举引用场景
    1.枚举:特殊的类  抽象枚举,枚举类实现抽象方法。 packagecom.itheima.枚举;publicclasstest{publicstaticvoidmain(String[]args){//目标:认识枚举Aa1=A.x;System.out.println(a1);//1.枚举类的构造器是私有的,不......
  • JAVA面向对象高级三:匿名内部类
    1.认识匿名内部类: packagecom.itheima.匿名内部类;publicclasstest{publicstaticvoidmain(String[]args){//把这个匿名内部类编译成一个子类,然后会立即创建一个子类对象出来AnimalA=newAnimal(){@Overridepublicv......
  • JS区分数组和对象的方法
    1.使用Array.isArray()方法:Array.isArray()是一个静态方法,它接受一个参数,如果参数是一个数组,则返回true,否则返回false。这是区分数组和对象的最直接和最准确的方法。constarray=[];constobject={};console.log(Array.isArray(array));//输出:trueconsole.log(Ar......
  • 排序算法练习——最大间距:给定一个未排序的数组,找到排序后相邻元素之间的最大差值
    最大间距:给定一个未排序的数组,找到排序后相邻元素之间的最大差值。解决这个问题可以使用桶排序的思想。具体步骤如下:找到数组中的最大值和最小值。根据数组的长度,将数组划分成一定数量的桶,每个桶存放一定范围内的元素。计算每个桶内元素的最小值和最大值。遍历桶,计算相邻......
  • 排序算法练习——按照字符串的异位词分组:给定一个字符串数组,将所有异位词(字符相同但顺
    按照字符串的异位词分组:给定一个字符串数组,将所有异位词(字符相同但顺序不同的字符串)分组到同一个组中。要按照字符串的异位词分组,可以使用哈希表来将每个字符串排序后作为键,相同键的字符串即为异位词。以下是实现这个算法的Python代码:fromcollectionsimportdefaultdict......
  • Django框架之requests对象
    【一】requests对象引入【1】提交GET请求前端form表单中action属性,如果不写的话,默认就是向当前路由请求form表单中的method属性,如果不写默认就是GET请求<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title>{%lo......