#1 楼是把[123,""]这种数组的第 0 位元素作为 Map 的 key,第 1 位元素作为 Map 的 value,挺巧妙的。
Map 对比 key 一样不一样的时候用的是
Object.is ,几乎和强逻辑等===是一样的,只不过在+0 、-0 以及 NaN 上结果不一样,所以如果是[[123],""]这种更复杂的形态就不行了。
同理,有个更简单的写法,是利用的 Object 里 key 唯一的原理:
Object.assign([],a,b);
能某种程度上解决上面的问题,但也不能说这个就是很稳的方法,这种用法肯定不是语言本身设计的初衷,得了解清楚为什么是这个结果才行,比如 key 为什么能判定为一样( ES2022 没有写明判断细节,只在 10.1.5.1 (2) 一句“If O does not have an own property with key P, return undefined.” 所以很可能未来引擎实现变化了,这个结果也会变化),上游原型上的 key 是否也可以,遇到 getter 、setter 会不会有问题,数组里的元素是引用的时候是否有问题。
不知道题主怎么定义“优雅”,这么做很巧妙,但是团队协作的时候不容易看懂,你最好多写一些注释标明这一句是在干嘛……