简体   繁体   English

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

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

How to create new object array by adding property in jvascript如何通过在 jvascript 中添加属性来创建新的 object 数组

I have two array object obj1 and obj2 ,我有两个数组 object obj1obj2

if obj2 and obj1 key value code matches, then add key sid with value as id如果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 }
]

Expected Output:预期 Output:

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

Here is one potential solution:这是一种潜在的解决方案:

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

which produces:产生:

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

You could take a hash table and map the new array.您可以使用 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; }

You may need reduce here:您可能需要在此处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.

相关问题 我想创建一个 object,其中键作为 object 的属性,值作为与键匹配的对象数组(javascript) - 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) 根据数组对象javascript中的属性添加键值 - Add the key value based on property in array object javascript 根据数组值添加 object 的键和值 - Add key and value of object based on Array value 根据匹配关键字Javascript更新对象数组中的同一对象 - Update the same object in an array of object based on Matching key Javascript Javascript根据键和值比较2个对象数组 - Javascript Compare 2 array of object based on key and value 根据嵌套数组中的匹配键值获取对象 - Get object based on matching key value in nested array 基于第一个值作为键和第二个值作为javascript中的值创建一个对象数组 - Create an array of object based on first value as key and second value as value in javascript 根据对象的值将javascript对象键排序到数组中 - Sort javascript object key into array based on object's value Javascript:根据键从 Object 数组中的数组中删除值 - Javascript: Remove Value from array inside an array of Object based on key 基于键值数组将 javascript object 转换为对象数组 - convert javascript object into array of objects based on key value array
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM