1
palmers 2021-05-08 18:34:42 +08:00
保留原格式是什么意思啊?
|
2
palmers 2021-05-08 18:34:54 +08:00
[... new Set([[100,200],[111,222],[100,200],[111,222],[100,200],[111,222]].flatMap(e => e))] 这样行吗?
|
3
zoeliu 2021-05-08 18:36:36 +08:00 via Android
就是单纯去重,不 flatten 对吧,保留嵌套形式。
那重复的元素去掉后面的保留第一个吗? |
4
maloneleo88 OP |
5
zoeliu 2021-05-08 18:57:06 +08:00 via Android
@maloneleo88 你要去重的是里面相同的数组(看起来相同),还是每个数组里的元素?
不好意思,意思还不是很明确 |
6
maloneleo88 OP @zoeliu 去除 arr 里面完全相同的数组。
[[100,200],[111,222],[100,200],[111,222],[100,200],[111,222]] 得到 [[100,200],[111,222]] 就是把重复的去除,每种只保留一个 |
7
orzorzorzorz 2021-05-08 19:26:31 +08:00
如果数组里的结构确定了,试试用 map ?
比如 key 用 100 、111,value 用于记录后续的值,比如 200-xxx-yyy 这样。因为是完全相同,所以不存在重复 key 的情况。最后再把 map 转成数组。 |
8
zoeliu 2021-05-08 19:41:43 +08:00
如果只是一层数组套一层数组:
```js function isEqual(a, b) { if (a.length !== b.length) { return false; } else { for (let i = 0; i < a.length; i++) { if (a[i] !== b[i]) { return false; } } return true; } } function removeRepeat(arr) { let newArr = []; while (arr.length) { let temp = arr.shift(); newArr.push(temp); arr = arr.filter((item) => !isEqual(item, temp)); } return newArr; } var arr = [ [100, 200], [111, 222], [100, 200], [111, 222], [100, 200], [111, 222], ]; removeRepeat(arr); ``` 没有考虑套的数字里面还有非基本类型的情况。如果还有更多需求,再补充吧。 |
9
violetlai 2021-05-08 19:43:25 +08:00
lodash 实现
_.uniqWith(arr, _.isEqual) |
10
maloneleo88 OP @zoeliu 谢谢老哥, 辛苦。 完美实现
|