【问题标题】:Convert a dictionary into an array keeping the dictionary keys将字典转换为保留字典键的数组
【发布时间】:2020-10-02 08:12:36
【问题描述】:

我正在尝试找到一种更优雅的方式将字典字典转换为字典数组并保留原始字典的键信息。

如果是

let data= { boss: { name:"Peter", phone:"123"},
            minion: { name:"Bob", phone:"456"},
            slave: { name:"Pat", phone: "789"} 
          }

我想想出一些能给我的东西

output = [ { role:"boss", name:"Peter", phone:"123"},
           { role:"minion", name:"Bob", phone:"456"},
           { role:"slave", name:"Pat",  phone:"789"}
         ]

我的解决方案是使用Object.keys 方法,但我认为它不是很有效。有些东西告诉我我要走复杂的全能路,一定有一条更简单的路,但我不明白:

 Object.keys(data)
                .map((elem, i) => {
                    return Object.assign({role: e}, Object.values(data)[i]);
                })

这是做我打算做的最干净的方式吗?

谢谢

【问题讨论】:

  • 你可以使用const output = Object.entries(data).map(({ role, value) => ({ ...value, role }));

标签: javascript arrays dictionary


【解决方案1】:

您可以映射条目并为新对象选择键/角色。

let data = { boss: { name: "Peter", phone: "123" }, minion: { name: "Bob", phone: "456" }, slave: { name: "Pat", phone: "789" } },
    result = Object.entries(data).map(([role, values]) => ({ role, ...values }));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • 很好的答案,与另一个答案非常相似,但我想完全理解:我们在哪里准确指定角色的关键是“角色”?在“lambda”([role, values]) 的输入上,我们将一个纯字符串作为角色提供...如何将其转换为输出字典的键?
  • 变量role在对象中用作short hand property
【解决方案2】:

使用Object.entries,您可以获得[key, value] 对作为数组,并可以使用Array.map 函数获得您想要的结果。

let data = {
  boss: { name:"Peter", phone:"123"},
  minion: { name:"Bob", phone:"456"},
  slave: { name:"Pat", phone: "789"}
};

const result = Object.entries(data).map(([key, value]) => ({
  role: key,
  ...value
}));
console.log(result);

【讨论】:

    【解决方案3】:

    您可以使用Array.prototype.reduceObject.entries 循环遍历字典中的每个条目并将其缩减为一个数组:

    const data = { boss: { name: "Peter", phone: "123" }, minion: { name: "Bob", phone: "456" }, slave: { name: "Pat", phone: "789" } };
    
    function getArray(data) {
      return Object.entries(data).reduce((a, [k, v]) => {
        a.push({role: k, ...v});
        return a;
      }, []);
    }
    console.log(getArray(data));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-21
      • 1970-01-01
      • 1970-01-01
      • 2013-03-30
      • 2020-09-16
      • 2021-08-10
      • 1970-01-01
      • 2011-09-19
      相关资源
      最近更新 更多