使用js把{a: [1, 2, 2, 3], b: 4}去重
时间: 2023-11-19 16:04:39 浏览: 132
以下是使用JavaScript实现该功能的代码:
```javascript
const obj = {a: [1, 2, 2, 3], b: 4};
for (let prop in obj) {
if (Array.isArray(obj[prop])) {
obj[prop] = [...new Set(obj[prop])];
}
}
console.log(obj); // 输出 { a: [1, 2, 3], b: 4 }
```
上述代码中,我们首先使用`for...in`循环遍历对象的属性,判断每个属性值是否为数组。如果是数组,我们就使用ES6中的`Set`对象去重,并将去重后的数组重新赋值给该属性。最后输出去重后的对象。
相关问题
[{a:‘1’,b:‘1’,c:‘1’},{a:‘2’,b:‘2’,c:‘2’},{a:‘3’,b:‘3’,c:‘2’},{a:‘4’,b:‘4’,c:‘1’}]更具 c 判断去重返回[{a:‘1’,b:‘1’,c:‘1’},{a:‘2’,b:‘2’,c:‘2’]
这是一个JavaScript数组,其中包含对象,每个对象有三个属性:a、b和c。您想根据c属性的值去重并保留唯一值,那么可以创建一个新的集合(如Map),然后将每个对象的c值作为键,对象本身作为值存储。最后将Map转换回数组形式,会自动去除重复项。
以下是实现这个功能的示例代码:
```javascript
let arr = [{a: '1', b: '1', c: '1'}, {a: '2', b: '2', c: '2'}, {a: '3', b: '3', c: '2'}, {a: '4', b: '4', c: '1'}];
let uniqueMap = new Map();
for (let obj of arr) {
if (!uniqueMap.has(obj.c)) {
uniqueMap.set(obj.c, obj);
}
}
let resultArray = Array.from(uniqueMap.values());
console.log(resultArray); // 输出:[{a: '1', b: '1', c: '1'}, {a: '2', b: '2', c: '2'}]
```
js去重数组[{a:1,b:2},{a:1,b:2}]
在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;
```
阅读全文