Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何为数组中的每个对象指定它们自己的密钥?_Javascript_Key_Key Value - Fatal编程技术网

Javascript 如何为数组中的每个对象指定它们自己的密钥?

Javascript 如何为数组中的每个对象指定它们自己的密钥?,javascript,key,key-value,Javascript,Key,Key Value,我试图以这样一种方式更改数据,即对象的每个元素都有自己的键。我认为我的问题相当简单,但我还没有想出一个方法来解决这个问题 我的数据现在的排列方式: [ { "country name": "Qatar", "GDP": "140,649.2", "country code": "QAT" }, { "country name": "MacaoSAR,China", "GDP": "139,767.3", "country code":

我试图以这样一种方式更改数据,即对象的每个元素都有自己的键。我认为我的问题相当简单,但我还没有想出一个方法来解决这个问题

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

[
  {
    "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键可能会重复,因此在解析时可能会丢失一些数据,最好使用当前结构,或者可以使用数字作为键。

非重复的
“国家代码”
键的解决方案:

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"
    }
}

只需将第二个示例包装在
{}
中,这应该对您有用。我不太明白您的意思,包装我的第二个示例并不能真正为每个元素提供一个键值。
startofflict
应该来自哪里?或
fillKey
?或者
name
?我不明白您从第一个示例到第二个示例的逻辑过程。但在第一个示例中,对象位于数组中,因此它们没有键,在第二个示例中,对象位于另一个对象中。因此,要给你的对象密钥,你需要把它们放在一个对象内。你确定“国家代码”不会重复吗?