[...new Set(arr.map(JSON.stringify))].map(JSON.parse)
时间: 2024-04-23 09:24:09 浏览: 19
`[...new Set(arr.map(JSON.stringify))].map(JSON.parse)` 这段代码的作用是将数组 arr 中的对象进行去重,返回一个由去重后的对象组成的数组。
具体来说,代码的执行步骤如下:
1. `arr.map(JSON.stringify)`:将数组 arr 中的每个对象转换为字符串,返回一个由字符串组成的新数组。这里使用 JSON.stringify 方法将对象转换为字符串,因为 Set 只能存储基本数据类型,不能存储对象。
2. `new Set(arr.map(JSON.stringify))`:使用 Set 对数组中的字符串进行去重,得到一个由去重后的字符串组成的 Set。
3. `[...new Set(arr.map(JSON.stringify))]`:使用展开运算符将 Set 转换为数组,得到一个由去重后的字符串组成的数组。
4. `.map(JSON.parse)`:使用 map 方法将数组中的每个字符串转换为对象,返回一个由去重后的对象组成的数组。这里使用 JSON.parse 方法将字符串转换为对象。
综上所述,`[...new Set(arr.map(JSON.stringify))].map(JSON.parse)` 这段代码的作用就是将数组 arr 中的对象进行去重,返回一个由去重后的对象组成的数组。
相关问题
map(JSON.stringify) 报错
如果在使用 `map` 方法时出现 `JSON.stringify` 报错,可能是因为数组中包含了不支持被转换为字符串的数据类型,例如 undefined 或 function。
解决这个问题的方法是,在调用 `JSON.stringify` 方法时,使用一个函数作为第二个参数,对不支持转换为字符串的数据类型进行处理。例如:
```javascript
const arr = [{id: 1, name: 'Tom'}, {id: 2, name: 'Jerry'}, undefined];
const uniqueObjects = [...new Set(arr.map(obj => JSON.stringify(obj, (key, value) => typeof value === 'undefined' ? null : value)))].map(JSON.parse);
console.log(uniqueObjects); // [{id: 1, name: 'Tom'}, {id: 2, name: 'Jerry'}]
```
在上面的代码中,我们使用一个箭头函数作为 `map` 方法的参数,对每个对象进行转换。在调用 `JSON.stringify` 方法时,我们传入了一个函数作为第二个参数,用于对不支持转换为字符串的数据类型进行处理。在这里,我们将 undefined 类型转换为 null 类型。
需要注意的是,使用这种方法进行转换后,原始数据中的 undefined 数据类型会被转换为 null 数据类型,因此在去重后的对象数组中,所有原始数据中的 undefined 数据类型都会变成 null 数据类型。如果需要保留原始数据中的 undefined 数据类型,可以使用其他方法进行对象去重。
js json数组去重
可以使用ES6的Set数据结构来去重,具体代码如下:
let arr = [1, 2, 3, 3, 4, 4, 5];
let uniqueArr = Array.from(new Set(arr));
console.log(uniqueArr); // [1, 2, 3, 4, 5]
如果需要去重的是包含JSON对象的数组,则可以先将数组中的JSON对象序列化成字符串,再进行去重操作,最后再将字符串还原为JSON对象,具体代码如下:
let arr = [{name: 'Tom', age: 18}, {name: 'Jack', age: 20}, {name: 'Tom', age: 18}];
let uniqueArr = Array.from(new Set(arr.map(JSON.stringify))).map(JSON.parse);
console.log(uniqueArr); // [{name: "Tom", age: 18}, {name: "Jack", age: 20}]
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)