Min*_*ing 7 javascript ecmascript-6
下面是一些示例 Javascript (ES6) 代码,它们不会按照直觉想象的那样做。
const exampleMap = new Map([[{a: 1}, 2]]);
console.log(exampleMap.get({a: 1}));
Run Code Online (Sandbox Code Playgroud)
事实证明,这会打印undefined. 为什么?这个 StackOverflow answer 中涵盖了推理。每对MDN条目地图,Map使用===为重点的平等。并且,根据的 MDN 条目===,Objects 通过引用相等进行比较。
这一切都很好。它完全按照文档所说的去做。不幸的是,上面的代码试图做的事情会非常有用,即使它不是规范的实际行为。
我如何使用Map,或者我应该使用什么来代替Map,来获得键值查找,其中键是通过对象深度相等语义进行比较的?
Cer*_*nce -1
您需要以某种方式比较或获取对用作 Map 键的确切对象的引用。一种选择是迭代 Map 的entries,并检查其键值a为 1 的映射:
const exampleMap = new Map([[{a: 1}, 2]]);
const foundEntry = [...exampleMap.entries()]
.find(([key, val]) => key.a === 1);
console.log(
foundEntry
? foundEntry[1]
: 'Not found!'
);Run Code Online (Sandbox Code Playgroud)
另一种方法:
const exampleMap = new Map([[{a: 1}, 2]]);
const foundKey = [...exampleMap.keys()]
.find(key => key.a === 1);
console.log(
foundKey
? exampleMap.get(foundKey)
: 'Not found!'
);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
803 次 |
| 最近记录: |