Javascript 在ES6中,基于对象道具值合并2个对象向量的最佳方法是什么?
给定这两个对象向量:Javascript 在ES6中,基于对象道具值合并2个对象向量的最佳方法是什么?,javascript,vector,ecmascript-6,Javascript,Vector,Ecmascript 6,给定这两个对象向量: dbVector = [ {name: 'one', qty: 1, id: 'id10'}, {name: 'two', qty: 2, id: 'id20'}, {name: 'three', qty: 3, id: 'id30'}, {name: 'for', qty: 4, id: 'id40'}, ]; localVector = [ {name: 'two', qty: 1, id: 'id20'}, {name: 'for', qty
dbVector = [
{name: 'one', qty: 1, id: 'id10'},
{name: 'two', qty: 2, id: 'id20'},
{name: 'three', qty: 3, id: 'id30'},
{name: 'for', qty: 4, id: 'id40'},
];
localVector = [
{name: 'two', qty: 1, id: 'id20'},
{name: 'for', qty: 1, id: 'id40'},
];
合并它们以便根据对象id更新数量的最佳方法是什么
result = [
{name: 'one', qty: 1, id: 'id10'},
{name: 'two', qty: 3, id: 'id20'},
{name: 'three', qty: 3, id: 'id30'},
{name: 'for', qty: 5, id: 'id40'},
];
目前我正在这样做:
const merge = (a, b, id) => a.filter( aa => !b.find ( bb => aa[id] === bb[id]) ).concat(b);
result = merge(localVector , dbVector , 'id');
但是数量不会被添加。您可以使用localVector
的每个元素进行更新
var dbVector=[{name:'one',qty:1,id:'id10'},{name:'two',qty:2,id:'id20'},{name:'three',qty:3,id:'id30'},{name:'for',qty:4,id:'id40'},
localVector=[{name:'two',qty:1,id:'id20'},{name:'for',qty:1,id:'id40'}],
map=newmap(dbVector.map(o=>[o.id,o]);
localVector.forEach(o=>map.get(o.id).qty+=o.qty);
log(dbVector)代码>
。作为控制台包装{max height:100%!important;top:0;}
您可以使用
让dbVector=[
{名称:'1',数量:1,id:'id10'},
{name:'two',qty:2,id:'id20'},
{name:'three',qty:3,id:'id30'},
{name:'for',数量:4,id:'id40'},
];
设localVector=[
{name:'two',qty:1,id:'id20'},
{name:'for',qty:1,id:'id40'},
];
函数searchLocalVector(名称、id){
设idx=0;
for(设localVector的obj){
if(obj.name==name&&obj.id==id){
返回idx;
}
idx++;
}
返回-1;
}
for(设i=0;i-1){
dbVector[i]。数量+=localVector[idx]。数量;
localVector.splice(idx,1);
idx=searchLocalVector(dbVector[i].name,dbVector[i].id);
}
}
concat(localVector);
log(dbVector)
尽量避免找到做任何事情的“最佳”方法。以某种方式进行评估,然后对照您的限制/要求进行评估。然后,如果必要的话,进行改进。更不用说,抽象和普遍的“最好的”并不存在。如果你有任何方法来实现这一点,请分享你的代码。我们想帮助你,不是发明东西,而是修复它。sry,我编辑了这篇文章来反映我当前的阶段Wesome,整洁和酷,只有一件事,如果本地有db不需要的对象,那么我们需要这样做:localVector.forEach(o=>map.get(o.id)?map.get(o.id)。qty+=o.qty:dbVector.push(o));谢谢。您可以使用映射来检查:localVector.forEach(o=>map.has(o.id)?map.get(o.id).qty+=o.qty:dbVector.push(o))代码>