[英]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.