js去重数组[{a:1,b:2},{a:1,b:2}]
时间: 2024-09-25 12:17:56 浏览: 41
在JavaScript中,对于包含简单键值对的对象数组,如果你想基于某个键(比如`{a: 1}`中的`a`)的值去重,你可以采用以下方法:
1. **使用`reduce`和`hasOwnProperty`**:
这里我们通常会先找到一个共享的键,然后通过这个键的值来检查数组中的其他对象。
```javascript
let arr = [{ a: 1, b: 2 }, { a: 1, b: 2 }];
let uniqueArr = arr.reduce((acc, cur) => {
if (!acc.some(prevObj => prevObj.hasOwnProperty('a') && prevObj.a === cur.a)) {
acc.push(cur);
}
return acc;
}, []);
```
2. **利用`Set`结合映射对象**:
可以先将对象的键值对存入Map中,然后利用Set去除重复值,再把结果转回来。
```javascript
let arr = [{ a: 1, b: 2 }, { a: 1, b: 2 }];
let uniqueObj = {};
let uniqueArr = arr.filter(obj => !uniqueObj[obj.a]).map(obj => ({ ...obj, ...uniqueObj[obj.a] || {} }));
uniqueObj[obj.a] = obj;
```
相关问题
数组B是数组 A的子集,如何把数组A去重数组B es6 代码。
您可以使用 ES6 的 Set 和 Array.from 方法来实现这个功能。以下是一个示例代码:
```javascript
const arrayA = [1, 2, 3, 4, 5];
const arrayB = [3, 4, 5];
// 将数组A和数组B合并,并转换为Set
const mergedSet = new Set([...arrayA, ...arrayB]);
// 将Set转换为数组
const deduplicatedArray = Array.from(mergedSet);
console.log(deduplicatedArray); // 输出: [1, 2, 3, 4, 5]
```
以上代码中,我们首先使用扩展运算符 `...` 将数组A和数组B合并为一个新数组,然后利用Set的去重特性,将合并后的数组转换为Set。最后,通过 `Array.from()` 方法将Set转换为数组,得到去重后的数组 `deduplicatedArray`。
希望这个示例能够帮到您!如果还有其他问题,请随时提问。
js代码:数组格式如下 [{id:1,value:[{A:1,B:2,C:3},{A:1,C:3,B:2},{A:1,B:2,C:4},{A:2,B:2,C:3}]}],则修改为 [{id:1,value:[{A:1,B:2,C:3},{A:1,B:2,C:4},{A:2,B:2,C:3}]}],valueduixia对象不固定为A,B,C三项,而是很多项
可以使用 JavaScript 中的 Array.prototype.map() 和 Array.prototype.reduce() 方法来实现:
```js
const arr = [
{
id: 1,
value: [
{ A: 1, B: 2, C: 3 },
{ A: 1, C: 3, B: 2 },
{ A: 1, B: 2, C: 4 },
{ A: 2, B: 2, C: 3 }
]
}
];
const result = arr.map(item => ({
id: item.id,
value: item.value.reduce((acc, cur) => {
const keys = Object.keys(cur);
const newObj = keys.reduce((obj, key) => {
if (acc.every(item => item[key] !== cur[key])) {
obj[key] = cur[key];
}
return obj;
}, {});
acc.push(newObj);
return acc;
}, [])
}));
console.log(result); // [{id:1,value:[{A:1,B:2,C:3},{A:1,B:2,C:4},{A:2,B:2,C:3}]}]
```
这段代码中,我们首先使用 map() 方法遍历原数组中的每一个对象,然后使用 reduce() 方法对每一个对象中的 value 数组进行去重操作。具体的实现过程是:对于每一个对象,我们先使用 Object.keys() 方法获取该对象中的所有属性名,然后再使用 reduce() 方法遍历这些属性名,对于每一个属性名,我们判断在结果数组中是否已经存在该属性名对应的值,如果不存在,则将该属性名和对应的值添加到一个新的对象中,最后将该新对象加入到结果数组中。这样就实现了对原数组中的重复项的去除。
阅读全文