如何解决JavaScript 将一系列 objs 分组
我有以下代码,其中我有一组 obj b
是将它们分组的方式由 a
在 elements
中定义的地方。
我对如何去做有一些疑问。
例如,滚动 a
或 b
是否正确?
你能帮我一把吗?
const a = [{
_id: 0,elements: ['aasa','cccx','zzzx','sd']
},{
_id: 1,elements: ['bb','xx']
}
];
const b = [{
_id: 'aasa',info: "sssas"
},{
_id: 'bb'
},{
_id: 'zzzx',info: "ssss"
},{
_id: 'cccx',info: "sss"
},{
_id: 'xx'
}
];
// result
[
[{
_id: 'aasa',info: "sssas"
},{
_id: 'zzzx',info: "ssss"
},{
_id: 'cccx',info: "sss"
}
],[{
_id: 'bb'
},{
_id: 'xx'
}
]
];
c = a.map(el => el.elements)
const p = b
//.map(el => el.elements)
.reduce(function(prev,curr) {
//if
prev.push(curr);
return prev;
},[]);
//console.log("End",p)
解决方法
您可以先将 b
更改为查找对象(这里我使用了 Map),其中每个 id 都是指向对象本身的键:
// Transform `b` into a Map of the form:
Map {
'aasa' => {
_id: 'aasa',info: "sssas"
},'bb' => {
_id: 'bb'
}
// ... etc ...
}
然后,对于 a
中的每个对象,您可以映射 elements
数组,并使用该对象的 id 作为查找对象中的键,以获取具有该 id 的关联对象。在执行映射之前,您可以先在映射上使用 .has
过滤查找表中不存在的任何键(即:id):
const a = [{ _id: 0,elements: ['aasa','cccx','zzzx','sd'] },{ _id: 1,elements: ['bb','xx'] } ];
const b = [{ _id: 'aasa',info: "sssas" },{ _id: 'bb' },{ _id: 'zzzx',info: "ssss" },{ _id: 'cccx',info: "sss" },{ _id: 'xx' } ];
const lut = new Map(b.map(obj => [obj._id,obj]));
const res = a.map(({elements}) => elements.filter(key => lut.has(key)).map(key => lut.get(key)));
console.log(res);
这应该有效
const c = a.map(el1 => {
return b.filter(el2 => {
return el1.elements.includes(el2._id)
})
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。