如何从对象数组创建 JavaScript 对象?

时间:2021-03-17 14:35:39

标签: javascript

我正在尝试将一组对象转换为对象格式,并将值作为新对象的键。

假设我得到了这些数据:

const data = [
{
  key: "foo",
  value: "xyz",
  classLabel: "Test"
},
{
  key: "foo",
  value: "abc",
  classLabel: "Test"
},
{
  key: "bar",
  value: "aaa",
  classLabel: "Test"
}]

而我要构建的格式是这样的:

const expected = {
  foo: ["xyz", "abc"],
  bar: ["aaa"]
}

值被传输到键并被推入相同的数组以获取重复键。 到目前为止,我只提取了密钥:

const result = [...new Set(data.map(item => item.key))];  // ["foo", "bar"]

2 个答案:

答案 0 :(得分:4)

const data = [
{
  key: "foo",
  value: "xyz",
  classLabel: "Test"
},
{
  key: "foo",
  value: "abc",
  classLabel: "Test"
},
{
  key: "bar",
  value: "aaa",
  classLabel: "Test"
}];

let expected = data.reduce((out, {key, value}) => {
  out[key] = out[key] || [];
  out[key].push(value);
  return out;
}, {});

console.log(expected);

答案 1 :(得分:0)

以下应该有效:

const data = [
  {
    key: "foo",
    value: "xyz",
    classLabel: "Test",
  },
  {
    key: "foo",
    value: "abc",
    classLabel: "Test",
  },
  {
    key: "bar",
    value: "aaa",
    classLabel: "Test",
  },
];

const mapToObj = (arr) => {
  let obj = {};
  for (let i in arr) {
    let objKey = arr[i].key;
    obj[objKey]
      ? Object.assign(obj, { [arr[i].key]: [obj[objKey], arr[i].value] })
      : Object.assign(obj, { [arr[i].key]: arr[i].value });
  }
  return obj;
};

console.log(mapToObj(data));