繁体   English   中英

通过基于 javascript 中的匹配键添加键值来创建数组 object

[英]create array object by add key value based on matching key in javascript

如何通过在 jvascript 中添加属性来创建新的 object 数组

我有两个数组 object obj1obj2

如果obj2obj1键值code匹配,则添加键sid值作为 id

function arr(obj1, obj2){
   return obj1.filter(({ code }) =>
      obj2.find((obj) => Object.values(obj).includes(code ))
    );
}
var obj1 = [ 
 { id:1, code:"item1", color:"blue" },
 { id:2, code:"item2", color: "white" },
 { id:3, code:"item3", color: "brown" }
]

var obj2 = [
 { id:1, code:"item1", stock: 10 },
 { id:3, code:"item1", stock: 20 },
 { id:2, code:"item2", stock: 20 }
]

预期 Output:

[ 
 { id:1, code:"item1", color:"blue", sid: 1,3 },
 { id:2, code:"item2", color: "white", sid: 2 }
]

这是一种潜在的解决方案:

var obj1 = [ 
 { id:1, code:"item1", color:"blue" },
 { id:2, code:"item2", color: "white" },
 { id:3, code:"item3", color: "brown" }
]

var obj2 = [
 { id:1, code:"item1", stock: 10 },
 { id:3, code:"item1", stock: 20 },
 { id:2, code:"item2", stock: 20 }
]

var reduced = obj1.reduce((obj, next) => {
  var { id, code, color } = next;
  var key = id + code;
  obj[key] = { id, code, color, sid: [] };
  return obj;
}, {});

obj2.forEach(obj => {
  var { id, code, stock } = obj;
  var key = id + code;
  var object = reduced[key];
  if (object)
    object.sid.push(stock);
});

var output = Object.values(reduced);
console.log(output);

产生:

[
  { id: 1, code: 'item1', color: 'blue', sid: [ 10 ] },
  { id: 2, code: 'item2', color: 'white', sid: [ 20 ] },
  { id: 3, code: 'item3', color: 'brown', sid: [] }
]

您可以使用 hash 表和 map 新阵列。

 var array1 = [{ id: 1, code: "item1", color: "blue" }, { id: 2, code: "item2", color: "white" }, { id: 3, code: "item3", color: "brown" }], array2 = [{ id: 1, code: "item1", stock: 10 }, { id: 3, code: "item1", stock: 20 }, { id: 2, code: "item2", stock: 20 }], map = array2.reduce((r, { id, code }) => { (r[code] = r[code] || []).push(id); return r; }, {}), result = array1.reduce((r, o) => { if (map[o.code]) r.push({...o, sid: map[o.code].join() }); return r; }, []); console.log(result);
 .as-console-wrapper { max-height: 100%;important: top; 0; }

您可能需要在此处reduce

 var obj1=[ { id:1, code:"item1", color:"blue" }, { id:2, code:"item2", color: "white" }, { id:3, code:"item2", color: "brown" }]; var obj2=[ { id:1, code:"item1", stock: 10 }, { id:3, code:"item1", stock: 20 }, { id:2, code:"item2", stock: 20 }] var result = Object.values([...obj1,...obj2].reduce((acc, {code, color, id, ...rest})=>{ acc[code] = acc[code] || {code, id, color, sid:[]}; if(rest.stock) acc[code].sid.push(id); return acc; },{})).map(({sid,...rest})=>({...rest, sid:sid.join(',')})); console.log(result);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM