将JavaScript列表转换为字典

9

我希望将一个JavaScript列表转换为具有指定键的字典。

我使用以下代码:

let list = ['cat', 'rabbit', 'fish']

list = list.map(x => {
  return ({ animal: x });
})
 
console.log(list);

当然这不起作用。 编辑:实际上它可以

预期结果:

[
  {
    "animal": "cat"
  },
  {
    "animal": "rabbit"
  },
  {
    "animal": "fish"
  }
]

编辑:

letlist=list实际上是问题中的一种笔误 - 在我的真实代码中是正确的。我没有测试这个片段,因为我认为它不起作用。然后我自己搞混了,也打错了预期的结果。我的代码更复杂,把所有的都发布出来没有意义。既然代码可行,我认为我的错误必须在其他地方。感谢您的帮助。


所以,为了确保理解正确,您想要一个具有三倍不同属性“动物”的对象? - Boldewyn
5
你期望的结果毫无意义。你应该得到 [{animal: 'cat'}, {animal: 'rabbit'}, {animal: 'fish'}] - gen_Eric
你正在开发什么类型的应用程序?它是一个必须在浏览器中呈现的Node.JS或原始JS吗? - H. Pauwelyn
2
一个字典按照定义应该具有唯一的键。 - Keith.Abramo
2个回答

13

当然这样是行不通的。

如果我们修复了 Let 中的拼写错误并且假设您想要一个包含三个对象的数组,它实际上是可以工作的,只是您没有使用结果:

    let list = ['cat', 'rabbit', 'fish']

//  vvvvvvv
    list = list.map(x => {
      return({animal: x});
    });
    console.log(list);

或者更简明地用一个简洁的箭头函数:

let list = ['cat', 'rabbit', 'fish']

list = list.map(x => ({animal: x}));
console.log(list);


不过,看起来他想做的并不是这样。他似乎想要一个具有3个相同键的Map;在一个列表中。 - Carcigenicate
1
@Carcigenicate:看到Rocket Hazmat的评论。在原帖作者回来之前,我倾向于认为这是问题中的一个打字错误。虽然我可能错了,但希望他们会告诉我们。 - T.J. Crowder
1
@Carcigenicate:那个“期望结果”是不可能的,很可能只是问题中的一个打字错误。 - gen_Eric

1
我会在@T.J. Crowder的回答中提到:Ecma Script 6 (ES6)无法在旧浏览器和Internet Explorer中呈现(仅限箭头函数=>,您可以使用下面的代码替代:

var list = ['cat', 'rabbit', 'fish']

list = list.map(function(x) {
  return ({
    animal: x
  });
});

console.log(list);

如果您想保留原始列表,可以使用以下代码:

var list = ['cat', 'rabbit', 'fish']

var result = list.map(function(x) {
  return ({
    animal: x
  });
});

console.log(list);
console.log(result);

ES6中的典型特性包括:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接