繁体   English   中英

根据与不同数组中 Object 的属性匹配的值,为数组中的每个 Object 添加属性

[英]Add a Property to Each Object in an Array Based on a Value Matching a Property of an Object in a Different Array

我有两个 arrays 对象:

const arr1 = [ {key: '12', name: 'john'}, {key: '9', name: 'steve'}, {key: '4', name: 'harry'}, {key: '2', name: 'jane'} ];

const arr2 = [ {key: '12', age: '29', gender: 'm'}, {key: '9', age: '43', gender: 'm'}, {key: '4', age: '19', gender: 'm'}, {key: '2', age: '65', gender: 'f'} ];

arr1将始终包含与arr2相同数量的对象,并且key属性将始终保持一致,例如在上面的示例中,键'12', '9', '4', '2'存在于 arrays 中。

我正在寻找一种有效的方法将name属性从arr1中的每个 object 添加到arr2中的 object 中,该属性具有相同的 key 属性值。 以上是一个简化的示例,在我的用例中,arrays 都可能包含 300 多个对象。

预期结果:

arr3 = [ {key: '12', age: '29', gender: 'm', name: 'john'}, {key: '9', age: '43', gender: 'm', name: 'steve'}, {key: '4', age: '19', gender: 'm', name: 'harry'}, {key: '2', age: '65', gender: 'f', name 'jane'} ];

我可以通过一个嵌套循环来实现这一点,该循环遍历arr1中的每个 object 并检查arr2中的每个 object ,但想知道是否有一种简化/更有效的方法使用较新版本的 ECMAScript 中的一些函数(我'我还在学习)。

假设 arr1 和 arr2 总是相同的长度并按它们的键排序,你可以这样做:

let arr3=arr2;
for (let i = 0;i<arr1.length;i++){
    arr3[i].name=arr1[i].name;
}

我的 output 这样做:

[
  { key: '12', age: '29', gender: 'm', name: 'john' },
  { key: '9', age: '43', gender: 'm', name: 'steve' },
  { key: '4', age: '19', gender: 'm', name: 'harry' },
  { key: '2', age: '65', gender: 'f', name: 'jane' }
]

我希望这有帮助

 const arr1 = [ {key: '12', name: 'john'}, {key: '9', name: 'steve'}, {key: '4', name: 'harry'}, {key: '2', name: 'jane'} ]; const arr2 = [ {key: '12', age: '29', gender: 'm'}, {key: '9', age: '43', gender: 'm'}, {key: '4', age: '19', gender: 'm'}, {key: '2', age: '65', gender: 'f'} ]; const concat = arr1.concat(arr2); var arr3 = Object.values(concat.reduce((acc, {key, ...rest})=>{ acc[key] = {...(acc[key] || {}), ...{key, ...rest}}; return acc; },{})); console.log(arr3);

这将起作用。

 const arr1 = [ {key: '12', name: 'john'}, {key: '9', name: 'steve'}, {key: '4', name: 'harry'}, {key: '2', name: 'jane'} ]; const arr2 = [ {key: '12', age: '29', gender: 'm'}, {key: '9', age: '43', gender: 'm'}, {key: '4', age: '19', gender: 'm'}, {key: '2', age: '65', gender: 'f'} ]; arr2.map((elm, index) => { elm.name = arr1[index].name; }) console.log(arr2);

您可以使用 Map 添加名称属性

 const arr1 = [ {key: '12', name: 'john'}, {key: '9', name: 'steve'}, {key: '4', name: 'harry'}, {key: '2', name: 'jane'} ]; const arr2 = [ {key: '12', age: '29', gender: 'm'}, {key: '9', age: '43', gender: 'm'}, {key: '4', age: '19', gender: 'm'}, {key: '2', age: '65', gender: 'f'} ]; map=new Map() arr1.map(o=>map.set(o.key,o)) arr2.forEach(o=>o.name=map.get(o.key).name) console.log(arr2)

 const arr1 = [ {key: '12', name: 'john'}, {key: '9', name: 'steve'}, {key: '4', name: 'harry'}, {key: '2', name: 'jane'} ]; const arr2 = [ {key: '12', age: '29', gender: 'm'}, {key: '9', age: '43', gender: 'm'}, {key: '4', age: '19', gender: 'm'}, {key: '2', age: '65', gender: 'f'} ]; function merge(arr1, arr2) { return arr1.reduce((merged, currentObj)=>{ const index = merged.findIndex(ele =>currentObj.key === ele.key); index?== -1. merged[index] = {..,merged[index]. ..:currentObj}. merged;push(currentObj), return merged }.arr2) } console,log(merge(arr1,arr2))

暂无
暂无

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

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