无法获取对象而不是数组

时间:2021-03-05 19:04:29

标签: javascript

您好,我是该网站的新手,我有一个关于 javascript 的问题,我不知道如何解决。

我有一个数组,我想把它变成一个对象。

arr = [
{prefer: "sport_swimming", rating: "1"},
{prefer: "sport_running", rating: "5"},
{prefer: "sport_tennis", rating: "2"},
{prefer: "study_archeology", rating: "4"}];

obj = Object.assign({}, arr);



console.log(obj);

我想达到这样的目的:

{
    "sport": {
        "swimming":"1",
        "running":"5",
        "tennis":"2"
    },
    "study":
    {
        "archeology":"4"
    }
}

2 个答案:

答案 0 :(得分:2)

使用reduce,您可以查看数组并使用您从属性中分离出来的键构建一个对象。

const arr = [
  {prefer: "sport_swimming", rating: "1"},
  {prefer: "sport_running", rating: "5"},
  {prefer: "sport_tennis", rating: "2"},
  {prefer: "study_archeology", rating: "4"}
];


const out = arr.reduce((acc, data) => {
  const parts = data.prefer.split("_");
  acc[parts[0]] = acc[parts[0]] || {};
  acc[parts[0]][parts[1]] = data.rating;
  return acc;
}, {});

console.log(out);

答案 1 :(得分:1)

您可以使用reduce

const arr = [
    { prefer: "sport_swimming", rating: "1" },
    { prefer: "sport_running", rating: "5" },
    { prefer: "sport_tennis", rating: "2" },
    { prefer: "study_archeology", rating: "4" }];


const result = arr.reduce((a, e) =>
    ([parent, child] = e.prefer.split('_'),
        (a[parent] ??= {})[child] = e.rating,
        a), {});

console.log(result);

相关问题