当使用ES5语法时,你可以使用for
循环和hasOwnProperty
方法来实现两个数组对象的合并,覆盖重复的属性,并添加不重复的属性。以下是一个示例代码:
function mergeArrays(arr1, arr2) {
var merged = [];
var propMap = {};
// 遍历第一个数组,将属性添加到merged和propMap中
for (var i = 0; i < arr1.length; i ) {
var prop = arr1[i];
merged.push(prop);
propMap[prop.key] = prop;
}
// 遍历第二个数组,检查属性是否已存在于propMap中
for (var j = 0; j < arr2.length; j ) {
var prop = arr2[j];
if (propMap.hasOwnProperty(prop.key)) {
// 如果属性已存在,则覆盖
var index = merged.indexOf(propMap[prop.key]);
merged[index] = prop;
} else {
// 如果属性不存在,则添加
merged.push(prop);
}
}
return merged;
}
var arr1 = [{key: '1', value: 'a'}, {key: '2', value: 'b'}, {key: '3', value: 'c'}];
var arr2 = [{key: '2', value: 'b2'}, {key: '3', value: 'c2'}, {key: '4', value: 'd'}];
console.log(mergeArrays(arr1, arr2));
这段代码首先创建了一个空的合并数组 merged
和一个空的属性映射对象 propMap
。然后,通过遍历第一个数组 arr1
,将属性添加到 merged
数组中,并在 propMap
对象中以属性的键值作为键,属性对象作为值进行存储。
接下来,遍历第二个数组 arr2
,对于每个属性,检查它是否已存在于 propMap
中。如果存在,说明属性是重复的,则找到它在 merged
数组中的位置,并用第二个数组中的属性对象覆盖它。如果不存在,说明属性是不重复的,直接将属性添加到 merged
数组中。
最后,返回合并后的数组 merged
。这样就实现了两个数组对象的合并,重复属性被覆盖,不重复属性被添加。
我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!