JavaScript组一系列obj
我有下面的代码,其中我有一组objJavaScript组一系列obj,javascript,arrays,dictionary,object,reduce,Javascript,Arrays,Dictionary,Object,Reduce,我有下面的代码,其中我有一组objb是在a中通过元素定义它们的分组方式 我对怎么做有些怀疑。 例如,滚动a或b是否正确 你能帮我一下吗 const a = [{ _id: 0, elements: ['aasa', 'cccx', 'zzzx', 'sd'] }, { _id: 1, elements: ['bb', 'xx'] } ]; const b = [{ _id: 'aasa', info: "sssas"
b
是在a
中通过元素定义它们的分组方式
我对怎么做有些怀疑。
例如,滚动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
更改为查找对象(这里我使用了a),其中每个id都是指向对象本身的键:
//将'b'转换为以下形式的映射:
地图{
‘aasa’=>{
_id:‘aasa’,
信息:“SSSA”
},
‘bb’=>{
_id:'bb'
}
//……等等。。。
}
然后,对于a
中的每个对象,您可以映射到元素
数组,并使用该对象的id作为查找对象中的键,以获取具有该id的关联对象。在执行映射之前,您可以先使用筛选查找表中不存在的任何键(即:id)。映射上有:
const a=[{u id:0,元素:['aasa','cccx','zzzx','sd']},{u id:1,元素:['bb','xx']};
常量b=[{u id:'aasa',info:'sssas},{u id:'bb'},{u id:'zzzx',info:'ssss'},{u id:'cccx',info:'sss'},{u id:'xx'}];
const lut=新映射(b.Map(obj=>[obj.\u id,obj]);
const res=a.map(({elements})=>elements.filter(key=>lut.has(key)).map(key=>lut.get(key));
控制台日志(res)代码>这应该行得通
const c = a.map(el1 => {
return b.filter(el2 => {
return el1.elements.includes(el2._id)
})
});
请问您为什么建议创建查找对象而不是简单地创建:const c=a.map(item=>b.filter(obj=>item.elements.includes(obj.\u id))
(或类似的东西)@secan对于更大的数据集,使用Map可以提高效率(对于Map()
然后filter()
和.includes()
将是O(| a |*| b |*| elements |),而上述方法的时间复杂度是O(| b |+| a |*| |*| elements |)您可以在一行中完成:const c=a.map(item=>b.filter(obj=>item.elements.includes(obj.\u id)));
在您的结果中,id为cccx
的对象排在最后,但在元素中idcccx
排在zzzx
之前,这是交换顺序的原因还是无意中完成的?@NickParsons:因为它需要我使用它,排序是有影响的。但我认为,我得到的数据从后端看,没有排序,例如,元素内部的顺序,可能不匹配,因为我有所有的Obj。我的想法是使用b作为对象,我一直在排序,我在b中有对象。我不知道我是否解释得很好。