[英]I want to create an object with the key as a property from the object and value as an array of objects matching the key (javascript)
[英]create array object by add key value based on matching key in javascript
如何通过在 jvascript 中添加属性来创建新的 object 数组
我有两个数组 object obj1
和obj2
,
如果obj2
和obj1
键值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.