javascript - 将对象数组设置为具有选定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 中进行学习。我只是不知道该怎么做。帮助?
解决方案
您可以使用减少
- 循环
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)
推荐阅读
- html - Div 不包含内容
- java - 为什么擦除仍然允许覆盖/实现?
- react-native - React Native:如何检测功能组件将卸载?
- android - CameraX CameraView 中是否存在错误,因为它不起作用?
- javascript - Axios 使用 Reactjs 发布 - 春季启动
- android - 在 Kotlin 的泛型函数中,有什么替代方案可以替代或使用多个约束边界?
- swift - 测验应用程序的回答按钮闪烁动画
- r - s3 方法定义与另一个包的 s4 方法混淆
- oracle - PL/SQL: SQL 语句被忽略和 PL/SQL: ORA-00911: 无效字符
- asp.net - 为需要 web.config 和单个 HttpHandler 的极简 IIS Web 应用程序选择什么模板