当我运行以下代码时:
fake_key = new Set([{v: 1, w: 2}])
fake_memo = {};
fake_memo[fake_key] = 2;
fake_key = new Set([{v: 5, w: 5}])
fake_memo[fake_key] = 5;
然后打印或登录fake_memo
,我希望看到:
{ '[object Set]': 2, '[object Set]': 5 }
相反,我得到了:
{ '[object Set]': 5 }
好像我插入对象映射中的第一个对象被第二个对象淹没了。
为什么会这样?如何恢复我想要的行为(两个键都插入到地图中)?
答案 0 :(得分:3)
普通对象的属性键始终是字符串。您的集合将被转换为字符串,该字符串始终提供字符串<select>
。
您可以改用Map实例而不是普通对象,因为Map键可以是任何类型的值。为此,制作一张地图:
<script src="//unpkg.com/angular/angular.js"></script>
<body ng-app ng-init="count=0">
<button ng-click="count = count + 1" ng-disabled="stop" >Click Me</button>
<div>Count={{count}}</div>
<input type="checkbox" ng-model="stop">Stop counting<br>
</body>
然后
"[object Set]"
等使用
fake_memo = new Map();
检索值。
您可以在Map实例上使用普通的fake_memo.set(fake_key, 2);
操作,但是仍然会将Map视为普通对象。
答案 1 :(得分:1)
正如另一个答案所说,键只能是字符串。所以这可能就是您要寻找的东西:
fake_key = JSON.stringify(Array.from(new Set([{v: 1, w: 2}])));
fake_memo = {};
fake_memo[fake_key] = 2;
fake_key = JSON.stringify(Array.from(new Set([{v: 5, w: 5}])));
fake_memo[fake_key] = 5;