Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在ES6中,基于对象道具值合并2个对象向量的最佳方法是什么?_Javascript_Vector_Ecmascript 6 - Fatal编程技术网

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))