js 对象数组去重问题

在项目中定义对象数组是非常常见的,这就免不了要对对象数组进行去重。当然不能简单的使用===来解决问题,因为这时候数组中的类型为对象类型,即使完全相同的两个对象也不相等的。下面的例子说明一切:

{}==={}//fasle
[]===[]//fasle

所以应该使用其他方法来判断两个对象是否相等,能代表这个对象的唯一性的属性,比如id。

使用id举例:

var arr=[
    {id:01,name:‘jack‘},
    {id:02,name:‘tome‘},
    {id:01,name:‘jack‘},
]

方法一:使用对象的hasOwnProperty属性

var deRepeat=function(arr){
    let obj={};
    arr.forEach((item,index)=>{
        // 若重复则删除该项
        if(obj.hasOwnProperty(item.id)){
            arr.splice(index,1);
        // 不重复则存入obj
        }else{
            obj[item.id]=item.name;
        }
    });
    return arr;
}

方法二:使用数组的归并方法reduce,注意该方法接收两个参数(函数)

参数1(操作):在每一项上调用的函数,接收四个参数:pre(经过参数1中函数操作过后存入结果中的的值,相对于当前操作项为前一个值,可以说这个参数就是参数2),cur(当前项的值),index(当前值索引),arr(数组)

参数2(结果):初始值

var deRepeat=function(arr){
    let obj={};
    let res=arr.reduce(function(pre,cur,index,arr){
        // 当前项还没出现过,至今未发现重复项
        if(!obj.hasOwnProperty(cur.id)){
            obj[cur.id]=cur.name;
            pre.push(cur)
        }
        return pre;
    },[])
    return arr;
}

原文地址:https://www.cnblogs.com/xingguozhiming/p/10296727.html

时间: 2024-10-09 08:06:52

js 对象数组去重问题的相关文章

js中数组去重的几种方法

js中数组去重的几种方法         1.遍历数组,一一比较,比较到相同的就删除后面的                 function unique(arr){                         for(var i=0;i<arr.length;i++){                                 for(var j=i+1;j<arr.length;j++){                                         if(ar

JS 对象数组Array 根据对象object key的值排序sort,很风骚哦

有个js对象数组 var ary=[{id:1,name:"b"},{id:2,name:"b"}] 需求是根据name 或者 id的值来排序,这里有个风骚的函数 函数定义: function keysrt(key,desc) {   return function(a,b){     return desc ? ~~(a[key] < b[key]) : ~~(a[key] > b[key]);   } } 使用: var ary=[{id:1,nam

js对象数组按属性快速排序

前一篇<关于selector性能比赛>中提到,目测觉得在$("div,p,a")这样有逗号时,sizzle耗时异常(600多个元素,花了200ms),说是它可能没有优化ie下的排序.按所推荐的程序在IE下跑了下,的确,排序耗时很小. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 /* * 快速排序,按某个属性,或按“获取排序

ES6 set和map数据结构对对象数组去重简单实现

自从有了es6的set数据结构,数组的去重可以简单用一行代码实现,比如下面的方式 let arr = [1, 2, 2, 3, 4] function unique (arr) { return [...new Set(arr)] } console.log(unique(arr)) // [1, 2, 3, 4] 但是当数组的项不再是简单的数据类型时,比如是对象时,这种方法就会导致错误,比如下面的结果 let arr = [ { name: 'a', num: 1}, { name: 'b',

JS中数组去重

JS数组去重 JS中对数组去重最好不要用unique方法,该方法主要是对dom节点数组的去重,如果对普通的数组元素去重只会去掉与之相邻的重复元素,也就是如果数组中还有不相邻的重复元素存在,将不会被去掉,而且有时候会出现问题,所以对数组去重可以利用如下方法: 先对数组a进行遍历,同时创建一个新的数组对象arr for (var i=0 ;i<a.length;i++) {    if (arr.indexOf(a[i]) == -1) { arr.push(a[i]) } } 经过这样处理后的数组

JS实现数组去重

1.遍历数组法 它是最简单的数组去重方法(indexOf方法) 实现思路:新建一个数组,遍历去要重的数组,当值不在新数组的时候(indexOf为-1)就加入该新数组中: var arr=[2,8,5,0,5,2,6,7,2]; function unique1(arr){ var hash=[]; for (var i = 0; i < arr.length; i++) { if(hash.indexOf(arr[i])==-1){ hash.push(arr[i]); } } return h

js实现数组去重的三个方法、数组的快速排序

一:数组去重方法1 (思路:新建一个空的result数组,将需要去重的数组中的第一个元素传入,依次与剩余的元素进行对比,不重复则把元素传入到result数组中.) Array.prototype.removeDup = function(){ var result = [this[0]]; for(var i = 1 ; i<this.length; i++){ var repeat = false; for(var j = 0; j<result.length;j++){ if(this[i

js给数组去重写法

数组为 var list =['A','B','A']; 法一:常规做法,新建list,给list添加元素,添加前判断是否包含 var removeRepeatItem = function(list){ var newList = []; for(var i=0;i<list.length;i++){ if(newList.indexOf(list[i])==-1){ //不包含 newList.push(list[i]); } } return newList; } 法二.两次遍历同一数组,

对象数组去重

//对象数组的去重 function uniqObjInArray(objarray) { let len = objarray.length; let tempJson = {}; let res = []; for (let i = 0; i < len; i++) { //取出每一个对象 tempJson[JSON.stringify(objarray[i])] = true; } let keyItems = Object.keys(tempJson); for (let j = 0;