使用相似的键/值对将数组转换为对象

时间:2019-07-22 16:18:30

标签: javascript arrays json object

我有一个如下的值数组

[
    {
      "factor": {
        "data": "f1",
        "val": [
          "val1"
        ]
      }
    },
    {
      "factor": {
        "data": "f2",
        "val": [
          "val2"
        ]
      }
    }
  ]

是否可以将其转换为以下格式

{
    "keyvalue": {
        "factor": {
            "data": "f1",
            "val": ["val1"]
        },
        "factor": {
            "data": "f2",
            "val": ["val2"]
        }
    }
}

在给定键必须唯一的情况下,无法对对象进行标准的数组解析

2 个答案:

答案 0 :(得分:0)

不可能。对象中的每个键都必须是唯一的。要理解这一点,假设您有一个带有两个相同键的对象:

const obj = {
  "key": 1,
  "key": 2
}

但是使用obj.key之类的表达式时应该得到什么? 1还是2?废话。

您应该重新考虑您的对象结构,也许您需要一个对象数组?

{
  "keyvalue": {
    "factor": [
      {
        "data": "f1",
        "val": ["val1"]
      },
      {
        "data": "f2",
        "val": ["val2"]
      }
    ]
  }
}

答案 1 :(得分:0)

您可以做的就是使用data字段作为键,因为它始终是唯一的。

类似这样的东西:

{
    "factor": {
        "f1": ["val1"],
        "f2": ["val2"]
    }
}

这是将数组转换为键/值对象的方法:

let keyValue = {"factor": {}};
theArray.forEach((item) => {
    const key = item.factor.data;
    const value = item.factor.val;
    keyValue.factor[key] = value;
});

现在keyValue对象已描述。