js数组里面的对象根据其中两个属性值去重
时间: 2023-10-10 13:04:43 浏览: 47
你可以使用`reduce`和`find`方法来实现这个需求。代码如下:
```javascript
const arr = [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}, {id: 1, name: 'Alice'}, {id: 3, name: 'Charlie'}, {id: 2, name: 'Bob'}];
const uniqueArr = arr.reduce((acc, current) => {
const x = acc.find(item => item.id === current.id && item.name === current.name);
if (!x) {
return acc.concat([current]);
} else {
return acc;
}
}, []);
console.log(uniqueArr); // [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}, {id: 3, name: 'Charlie'}]
```
在上面的代码中,我们使用`reduce`方法来遍历数组,如果当前元素在累加器中不存在,则将其添加到累加器中,否则忽略该元素。我们使用`find`方法来查找数组中是否存在具有相同`id`和`name`属性值的对象。如果存在,则返回该对象;否则返回`undefined`。
相关问题
js 对象数组去重
对于JavaScript对象数组的去重,有几种常见的方法可以实现。
方法一是使用ES5的冒泡排序法进行去重。可以通过遍历数组,比较每个对象的属性值,如果存在重复的属性值,则使用splice方法删除重复的对象。最后返回去重后的数组。
方法二是使用ES5的双重循环方法进行去重。通过遍历数组,使用forEach方法遍历每个对象,利用every方法检查是否已经存在相同的属性值,如果不存在,则将该对象添加到一个临时数组中。最后返回去重后的数组。
方法三是使用两层循环或reduce方法进行去重。通过遍历数组,比较每个对象的属性值,如果存在重复的属性值,则使用splice方法删除重复的对象。最后返回去重后的数组。
总结起来,可以使用冒泡排序法、双重循环或reduce方法对JavaScript对象数组进行去重操作。具体选择哪种方法取决于具体的需求和数据结构。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
js数组中元素对象去重
在JavaScript中,如果要对数组中的元素对象进行去重,可以利用对象的某个属性作为去重依据,具体实现步骤如下:
1. 创建一个新数组用于存放去重后的元素对象。
2. 遍历原数组中的元素对象,将元素对象的某个属性值作为判断依据。
3. 利用indexOf()方法判断新数组中是否已存在该属性值,如果不存在,则将元素对象添加到新数组中。
4. 返回新的数组,即为去重后的元素对象数组。
下面是一个简单的代码示例:
```
let arr = [{
name: 'Tom',
age: 18
}, {
name: 'Jerry',
age: 20
}, {
name: 'Tom',
age: 18
}];
function unique(arr, attr) {
let newArr = [];
let tempArr = [];
for(let i=0; i<arr.length; i++) {
let item = arr[i];
if(tempArr.indexOf(item[attr]) == -1) {
tempArr.push(item[attr]);
newArr.push(item);
}
}
return newArr;
}
let uniqueArr = unique(arr, 'name');
console.log(uniqueArr);
```
在上面的代码中,我们通过unique()函数对原数组arr进行去重操作。该函数接受两个参数,分别为要进行去重的数组和去重依据的属性名。我们创建了两个数组newArr和tempArr,分别用于存放去重后的元素对象和去重依据。在遍历原数组arr的过程中,我们通过判断tempArr中是否已经存在该属性值来进行去重。最后返回去重后的元素对象数组uniqueArr,输出结果为:
```
[ { name: 'Tom', age: 18 }, { name: 'Jerry', age: 20 } ]
```
可以看到,去重成功,重复的元素对象已被删除。