我有两个对象。当我将这些作为键传递给关联数组并赋值时,所有值都存储错误(最后一个除外)。
有谁能告诉我我做错了什么?
var usrMrid = {name: "mrid"};
var usrXYZZ = {name: "xyzz"};
var comm = {};
comm[usrMrid] = "ONE";
comm[usrXYZZ] = "TWO";
console.log("usrMrid: " + comm[usrMrid]); // this gives TWO, when it should give ONE
console.log("usrXYZZ: " + comm[usrXYZZ]); // this works fine
答案 0 :(得分:7)
当您对对象使用[]
语法并将对象作为属性名称传递时,属性名称将成为给定表达式的string
表示形式,这将在您的情况下[object Object]
1}}。因此,当您使用不同的对象时,它们会创建名称为[object Object]
的相同属性,并覆盖之前的属性。
您可以在示例中看到它。在这里,我打印对象的属性,您可以看到只有一个名为[object Object]
的属性。
var usrMrid = {name: "mrid"};
var usrXYZZ = {name: "xyzz"};
var comm = {};
comm[usrMrid] = "ONE";
comm[usrXYZZ] = "TWO";
console.log(comm);
您可以Map
使用该案例
var usrMrid = {name: "mrid"};
var usrXYZZ = {name: "xyzz"};
var comm = new Map([
[usrMrid, "ONE"],
[usrXYZZ, "TWO"]
]);
console.log(comm.get(usrMrid));
答案 1 :(得分:2)
对象键只是String!使用地图:
var usrMrid = {name: "mrid"};
var usrXYZZ = {name: "xyzz"};
const comm = new Map([
[usrMrid,"ONE"],
[usrXYZZ, "TWO"]
]);
console.log(comm.get(usrMrid));
然而,对于符号来说,这也是一个非常好的用例:
const id = Symbol("id");
var usrMrid = {
name: "mrid",
[id]:"ONE"
};
var usrXYZZ = {
name: "xyzz",
[id]:"TWO"
};
console.log(usrMrid, usrMrid[id]);
答案 2 :(得分:2)
这有一个问题,当你以关联数组样式编写一个对象时,它只接受字符串。在你的情况下,它将覆盖自己,并且对于这两个对象总是有相同的答案,
你需要写这样的东西,否则它会一直覆盖它。
{{1}}