我正在一个数组中存储一些坐标,它长这样:
const coords = [{x: 260, y: 60}, {x: 180, y: 0}, {x: 180, y: 240}, {x: 360, y: 120}, {x: 180, y: 60}, {x: 180, y: 60}, {x: 180, y: 60}]
如何过滤这个数组,使得对象是唯一的,即没有具有相同x和y值的重复对象?预期输出应该是:
const coords = [{x: 260, y: 60}, {x: 180, y: 0}, {x: 180, y: 240}, {x: 360, y: 120}, {x: 180, y: 60}]
我见过一些类似的解决方案,但他们并没有真正解决这个问题。 我从以下函数开始:
const output = Object.values(
coords.reduce( (c, e) => {
if (!c[e.x]) c[e.x] = e;
return c;
}, {})
但它只返回具有不同x值的对象,因此完全忽略了y值。
reduce
调用是如何工作的吗?你的哈希键是e.x
,所以它只基于x
进行去重。你的哈希键不包括y
,那为什么不直接包含y
呢?例如,将键设置为\
${e.x}-${e.y}`。顺便说一下,将来可以使用 [Records](//github.com/tc39/proposal-record-tuple) 来实现这个功能:
new Set([ #{ x: 260, y: 60 }, #{ x: 180, y: 0 },…
])`。 - Sebastian Simon