JavaScript关联数组表现奇怪

时间:2017-12-06 06:26:13

标签: javascript arrays associative-array

我有两个对象。当我将这些作为键传递给关联数组并赋值时,所有值都存储错误(最后一个除外)。

有谁能告诉我我做错了什么?

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

3 个答案:

答案 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}}