关于数组去重?

const books = [

  {
      category: "编程",
      name: "JAVA"
  },

  {
      category: "编程",
      name: "MYSQL"
  },

  {
      category: "小说",
      name: "AAA"
  }

]

const result = [

  {
      category: "编程",
      books: ["JAVA", "MYSQL"]
  },

  {
      category: "小说",
      books: ["AAA"]
  }

]

需要将books转成result

阅读 1.8k
3 个回答
books.reduce((res, item) => {
    let target = res.find(citem => citem.category === item.category)
    if(target){
        target.books.push(item.name)
    }else{
        res.push({
              category: item.category,
              books: [item.name]
        })
    }
    return res
}, [])
books.reduce((res, item) => (((index = res.findIndex(citem => citem.category === item.category)) || index === 0) && index !== -1 ? res[index].books.push(item.name) :  res.push({category: item.category, books: [item.name]}), res), [])

js 代码

const books = [
    {category: "编程", name: "JAVA"},
    {category: "编程", name: "MYSQL"},
    {category: "小说", name: "AAA"},
];

Object.values(books.reduce((obj, {category, name}) => {
    (obj[category] ??= {category, books: []}).books.push(name);
    return obj;
}, {}));

输出

[
  { category: '编程', books: [ 'JAVA', 'MYSQL' ] },
  { category: '小说', books: [ 'AAA' ] }
]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题