繁体   English   中英

如何遍历json数据并合并具有相同状态ID的行?

[英]How to loop over json data and merge rows with the same state id?

我有us-senat的.json文件,每个州都有两个参议员。 我想遍历此json文件并创建应该具有状态id作为键的新JS对象,然后为每个键name1name2设置两个属性。 这是数据在原始文件中的外观示例:

 var senatorData = [{ state_code: "AK", name: "Daniel Sullivan" }, { state_code: "AK", name: "Lisa Murkowski" }, { state_code: "WY", name: "Michael Enzi" }, { state_code: "WY", name: "John Barrasso" } ]; $(document).ready(function(){ loadData(); }); function loadData() { if (senatorData) { for (var key in senatorData) { console.log(senatorData[key]); } } } 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 

在示例中,我仅显示了原始数据,这是我想要的:

var senatorDataNew = [
    "AK" = {
         name1: "Daniel Sullivan",
         name2: "Lisa Murkowski"
     },
     "WY" = {
         name1: "Michael Enzi",
         name2: "John Barrasso"
     }
];

循环时,我将设置新键并使用value设置name1属性,如果键已经存在,则需要保留name1并使用新值设置第二个属性name2 我想知道这是否可行,最简单的方法是什么?

您是否正在寻找这样的东西?

senatorDataNew = {};    
senatorData.forEach(senator => {
    if (! senatorDataNew[senator.state_code]) {
        senatorDataNew[senator.state_code] = {names: []};
    }

    senatorDataNew[senator.state_code].names.push(senator.name)
});

如果只有2个参议员,则可以根据累加器中是否已经存在键,使用reduce并在键旁边的对象中设置name1name2属性:

 function loadData() { if (senatorData) { return senatorData.reduce((a, {state_code, name}) => { if (state_code in a) a[state_code].name2 = name; else a[state_code] = {name1: name}; return a; }, {}); } } var senatorData = [{ state_code: "AK", name: "Daniel Sullivan" }, { state_code: "AK", name: "Lisa Murkowski" }, { state_code: "WY", name: "Michael Enzi" }, { state_code: "WY", name: "John Barrasso" } ]; $(document).ready(function(){ console.log(loadData()); }); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 

 var senatorData = [{ state_code: "AK", name: "Daniel Sullivan" }, { state_code: "AK", name: "Lisa Murkowski" }, { state_code: "WY", name: "Michael Enzi" }, { state_code: "WY", name: "John Barrasso" } ]; //convert the object into an object of key (state) and value (names) senatorData = senatorData.reduce(function(results, senator){ if (!results[senator.state_code]) results[senator.state_code] = []; results[ senator.state_code ].push(senator.name); return results; }, {}); console.log(senatorData); //convert the object into an array of objects senatorData = Object.keys(senatorData).map(function(state){ return { state_code: state, names: senatorData[state] }; }); console.log(senatorData); 

暂无
暂无

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

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