繁体   English   中英

Javascript-将字典重新格式化为字典数组

[英]Javascript - reformatting a dictionary to an array of dictionaries

我在下面的字典中列出了人员列表和频率编号,我正在尝试将其格式化为

var frequency_list = [{"text":"Jay Sekulow","size":1},{"text":"Jeff Mason","size":1},.....]   

上面是D3.js一张图表所需的格式:

原始清单:

 {    'Jay Sekulow': 1,
             'Jeff Mason': 1,
             'John Bolton': 2,
             'John Dowd': 1,
             'Jonathan Oatis': 3,
             'Michael Cohen': 2,
             'Michael Dreeben': 1,
             'Mike Pence': 2,
             'Patricia Zengerle': 1,
             'Paul Manafort': 2,
             'Rod Rosenstein': 1,
             'Ronald Reagan': 1,
             'Rudy Giuliani': 2,
             'Sarah N. Lynch': 1,
             'Sergei Skripal': 2, }

我该如何在javascript中解决这个问题?我尝试了以下代码,但格式错误:

    var freq_list = [];
    Object.keys(person).forEach(function(key) {
      var str = "{ \"text\": \""+ key + "\", \"size\": \"" + person[key] +"\"}";
       freq_list.push(str);
    });
console.log(freq_list)

结果:

["{ \"text\": \"Jay Sekulow\", \"size\": \"1\"}","{ \"text\": \"Jeff Mason\", \"size\": \"1\"},......]

 var data = { 'Jay Sekulow': 1, 'Jeff Mason': 1, 'John Bolton': 2, 'John Dowd': 1, 'Jonathan Oatis': 3, 'Michael Cohen': 2, 'Michael Dreeben': 1, 'Mike Pence': 2, 'Patricia Zengerle': 1, 'Paul Manafort': 2, 'Rod Rosenstein': 1, 'Ronald Reagan': 1, 'Rudy Giuliani': 2, 'Sarah N. Lynch': 1, 'Sergei Skripal': 2, }; var finalArray = Object.keys(data).map(val => { return { "text": val, "size": data[val] } }); console.log(finalArray); 

您应该使用新的Object.entries函数;或者,如果您使用的是旧版的javascript以支持旧版浏览器,请考虑使用Object.keys

const original = {
  'Jay Sekulow': 1,
  'Jeff Mason': 1,
  'John Bolton': 2,
  'John Dowd': 1,
  'Jonathan Oatis': 3,
  'Michael Cohen': 2,
  'Michael Dreeben': 1,
  'Mike Pence': 2,
  'Patricia Zengerle': 1,
  'Paul Manafort': 2,
  'Rod Rosenstein': 1,
  'Ronald Reagan': 1,
  'Rudy Giuliani': 2,
  'Sarah N. Lynch': 1,
  'Sergei Skripal': 2
}

function formatInfo(info) {
  return Object.entries(info).map(([text, size]) => ({text, size}))
}

const formatted = formatInfo(original)

运行以下代码段。 首先解析您的输入,然后reduce将帮助您。 您也可以使用lodashgroupBy方法

 const frequency_list = '[{"text":"Jay Sekulow","size":1},{"text": "Jeff Mason","size":1}]'; const a = JSON.parse(frequency_list); const result = a.reduce((solution, item) => { solution[item.text]= item.size; return solution }, {}); console.log(result); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM