在前端开发中,处理数组对象并合并具有相同属性值的对象是一个常见的需求。以下是一个使用 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]
}
}
*/
解释
- 初始化合并后的对象:我们用一个空对象
merged
来存储合并后的结果。 - 遍历数组:使用
forEach
方法遍历输入的数组。 - 获取合并的键:从当前对象中获取
keyField
的值作为合并的键。 - 初始化合并对象:如果
merged
对象中还没有这个键,则初始化一个空对象。 - 合并属性:遍历当前对象的所有属性,如果属性名不是
keyField
,则将其值推入对应键的数组中。 - 返回结果:返回合并后的对象。
这种方法可以灵活处理不同数组对象的合并需求,只需指定需要合并的属性名即可。
标签:keyField,对象,合并,js,数组,merged,属性 From: https://www.cnblogs.com/ai888/p/18607562