首页 > 解决方案 > 将对象数组设置为具有选定ID的对象并将具有相同键的对象设置为数组?

问题描述

我很难想到解决方案,所以我有一系列对象,例如:

const objectsArr = [
  { commment: 'hello world', bookId: '1'},
  { commment: 'foo world', bookId: '2'},
  { commment: 'bar world', bookId: '1'},
  { commment: 'bazz world', bookId: '2'},
]

你看我有一个外键 bookId,我希望它成为评论数组的键,我想把它转换成这样:

const objectBookIdKey = {
  1: [{ commment: 'hello world', bookId: '1'}, { commment: 'bar world', bookId: '1'}],
  2: [{ commment: 'foo world', bookId: '2'},{ commment: 'bazz world', bookId: '2'}],
}

我在上面创建的对象使用 bookId 的属性,并且有一组具有相同 bookId 的对象,我知道 lodash, ramda 为此,但我想在 js 中进行学习。我只是不知道该怎么做。帮助?

标签: javascript

解决方案


您可以使用减少

  • 循环objectsArr
  • 用作bookId
  • 检查它是否已经在对象上,如果它没有分配默认值然后推送值,否则将值推送到现有的

const objectsArr = [{ commment: 'hello world', bookId: '1'},{ commment: 'foo world', bookId: '2'},{ commment: 'bar world', bookId: '1'},{ commment: 'bazz world', bookId: '2'},]

let op = objectsArr.reduce((op,inp) => {
  op[inp.bookId] = op[inp.bookId] || []
  op[inp.bookId].push(inp)
  return op
},{})

console.log(op)


推荐阅读