写一个方法js将数组对象中某个属性值相同的对象合并成一个新对象

在前端开发中,处理数组对象并合并具有相同属性值的对象是一个常见的需求。以下是一个使用 JavaScript 实现的方法,将数组对象中某个属性值相同的对象合并成一个新对象。假设我们要合并的属性名为 keyField,并且我们希望将其他属性的值合并为一个数组。

/**
 * 合并数组中具有相同属性值的对象
 * @param {Array} array - 输入的数组对象
 * @param {string} keyField - 要合并的属性名
 * @returns {Object} - 合并后的对象
 */
function mergeObjectsByKey(array, keyField) {
    const merged = {};

    array.forEach(item => {
        const key = item[keyField];
        if (!merged[key]) {
            merged[key] = {};
        }

        // 合并属性,除了 keyField,其他属性都存入数组
        for (const [propertyName, value] of Object.entries(item)) {
            if (propertyName !== keyField) {
                if (!merged[key][propertyName]) {
                    merged[key][propertyName] = [];
                }
                merged[key][propertyName].push(value);
            }
        }
    });

    return merged;
}

// 示例使用
const data = [
    { id: 1, name: 'John', value: 10 },
    { id: 2, name: 'Jane', value: 20 },
    { id: 1, name: 'John Doe', value: 30 },
    { id: 2, name: 'Jane Smith', value: 40 }
];

const result = mergeObjectsByKey(data, 'id');
console.log(result);

/*
输出:
{
  "1": {
    "name": ["John", "John Doe"],
    "value": [10, 30]
  },
  "2": {
    "name": ["Jane", "Jane Smith"],
    "value": [20, 40]
  }
}
*/

解释

  1. 初始化合并后的对象:我们用一个空对象 merged 来存储合并后的结果。
  2. 遍历数组:使用 forEach 方法遍历输入的数组。
  3. 获取合并的键:从当前对象中获取 keyField 的值作为合并的键。
  4. 初始化合并对象:如果 merged 对象中还没有这个键,则初始化一个空对象。
  5. 合并属性:遍历当前对象的所有属性,如果属性名不是 keyField,则将其值推入对应键的数组中。
  6. 返回结果:返回合并后的对象。

这种方法可以灵活处理不同数组对象的合并需求,只需指定需要合并的属性名即可。

posted @ 2024-12-15 09:07  王铁柱6  阅读(525)  评论(0)    收藏  举报