如何为数组中的每个对象提供自己的键?

How can i give each of the objects in my array their own key?

我正在尝试更改我的数据,使我的对象的每个元素都有自己的键。我认为我的问题相当简单,但我还没有找到解决方法。

我的数据现在的排列方式:

[
  {
    "country name": "Qatar",
    "GDP": "140,649.2",
    "country code": "QAT"
  },
  {
    "country name": "MacaoSAR,China",
    "GDP": "139,767.3",
    "country code": "LUX"
  },
...

我希望数据的排列方式:

data: {    
    'QAT': {
         "country name": "Qatar",
         "GDP": "140,649.2",
       },
    'LUX': {
         "country name": "MacaoSAR,China",
         "GDP": "139,767.3",
       },
 ...

请不要介意不同的键值对。我完全感兴趣的是如何在 {} 括号内为我的值提供键值,如第二个示例所示。

您可以将其作为对象而不是像这样的数组发送...

{
  "NLD": {
    "fillKey": "conflict",
    "name": "2012 Northern Mali conflict",
    "startOfConflict": 2012
  },
  "LBY": {
    "fillKey": "conflict",
    "name": "2011– present Libyan factional fighting",
    "startOfConflict": 2011
  }
}

这将是一个问题,键在 JSON 中需要是唯一的,例如 case 键可能会重复,因此您在解析时可能会丢失一些数据,最好使用当前结构或者您可以使用数字作为键。

非循环"country code"键的解决方案:

var arr = [    // exemplary array
    {
        "country name": "Qatar",
        "GDP": "140,649.2",
        "country code": "QAT"
    },
    {
        "country name": "MacaoSAR,China",
        "GDP": "139,767.3",
        "country code": "LUX"
    }
], rearranged = {};

arr.forEach(function(obj){
    var info = {};
    Object.keys(obj).forEach((k) => k === "country code" || (info[k] = obj[k]));
    rearranged[obj["country code"]] = info;
});

console.log(JSON.stringify(rearranged, 0, 4));

输出:

{
    "QAT": {
        "country name": "Qatar",
        "GDP": "140,649.2"
    },
    "LUX": {
        "country name": "MacaoSAR,China",
        "GDP": "139,767.3"
    }
}