繁体   English   中英

如何将数组转换为新的父子数组

[英]how to convert array into new array of parent children

我有餐厅数据数组,我应该通过按属于的类别对项目进行分组来制作另一个数组,我应该转换这个数组:

[
     {
      "category":  {
        "title": "Appetizers",
      },
      "id": 1,
      "price": "10",
      "title": "Spinach Artichoke Dip",
    },
     {
      "category":  {
        "title": "Appetizers",
      },
      "id": 2,
      "price": "10",
      "title": "Hummus",
    },

     {
      "category":  {
        "title": "Salads",
      },
      "id": 3,
      "price": "7",
      "title": "Greek",
    },
    {
      "category":  {
        "title": "Salads",
      },
      "id": 4,
      "price": "9",
      "title": "Beyn",
    }
  ]

进入一个新数组,最终结果应该是这样的:

  [{
    "category": "Appetizers",
    "items" : ["Spinach Artichoke Dip","Hummus"]
  },
  {
    "category" : "Salads",
    "items" :["Greek", "Beyn"]
  }
]

我找不到怎么做,你能帮忙吗

假设您的数据是一个名为data的常量

所以你可以这样做:

const data = [
   {
    "category":  {
      "title": "Appetizers",
    },
    "id": 1,
    "price": "10",
    "title": "Spinach Artichoke Dip",
  },
   {
    "category":  {
      "title": "Appetizers",
    },
    "id": 2,
    "price": "10",
    "title": "Hummus",
  },

   {
    "category":  {
      "title": "Salads",
    },
    "id": 3,
    "price": "7",
    "title": "Greek",
  },
  {
    "category":  {
      "title": "Salads",
    },
    "id": 4,
    "price": "9",
    "title": "Beyn",
  }
];

const result = [];

data.forEach((item) => {
  const category = item.category.title;
  const title = item.title;

  let foundCategory = result.find((c) => c.category === category);
  if (foundCategory) {
    foundCategory.items.push(title);
  } else {
    result.push({ category, items: [title] });
  }
});

console.log(result);

现在您想要的结果将存储在result

快乐编码

const itemsToCategories = (itemsArr) => {
  const store = {};

  itemsArr.forEach(item => {
    const categoryTitle = item.category.title;
    if (!store[categoryTitle]) store[categoryTitle] = [];
    store[categoryTitle].push(item.title);
  });

  return Object.entries(store).map(([category, items]) => ({ category, items}));
};

该解决方案应该比大型数据集的公认答案快一点。 主要区别在于使用对象 ( store ) 而不是数组,因此按类别标题查找效率更高。 然后我们在最后从该对象构建一个数组。

这确实比上面接受的解决方案有更多的开销,因此对于较小的数据集,相比之下这最终会更慢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM