js实现两个数组对象,重复的属性覆盖,不重复的添加

2024-06-25 09:37:49 浏览数 (1)

当使用ES5语法时,你可以使用for循环和hasOwnProperty方法来实现两个数组对象的合并,覆盖重复的属性,并添加不重复的属性。以下是一个示例代码:

代码语言:javascript复制
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腾讯技术创作特训营最新征文,快来和我瓜分大奖!

0 人点赞