wordpress 网站加密,什么叫seo,腾讯做的导购网站,威海做网站多少钱/*** 数组对象按指定属性分组#xff0c;合并金额* param {Array} arr - 原始数组#xff08;元素为对象#xff09;* param {string} groupKey - 分组依据的属性名#xff08;如 type、id#xff09;* param {string} moneyKey - 需合并的金额属性名#xff08;如 money…/** * 数组对象按指定属性分组合并金额 * param {Array} arr - 原始数组元素为对象 * param {string} groupKey - 分组依据的属性名如 type、id * param {string} moneyKey - 需合并的金额属性名如 money、amount * returns {Array} 合并后的数组 */functionmergeObjectsByKey(arr,groupKey,moneyKey){// 用 Map 分组比普通对象更安全支持任意类型键constresultMapnewMap();arr.forEach(item{// 1. 获取当前 item 的分组键值如 item.type Aconstkeyitem[groupKey];// 2. 确保金额为数字兼容字符串格式的金额如 100 → 100constcurrentMoneyNumber(item[moneyKey])||0;// 3. 检查 Map 中是否已存在该分组if(resultMap.has(key)){// 存在累加金额constexistingItemresultMap.get(key);existingItem[moneyKey]currentMoney;}else{// 不存在创建新分组对象深拷贝避免修改原数据constnewItem{...item};// 复制原对象所有属性newItem[moneyKey]currentMoney;// 初始化金额确保为数字resultMap.set(key,newItem);}});// 4. 将 Map 的值转为数组返回returnArray.from(resultMap.values());}场景按 type 分组合并 money 金额// 原始数组constoriginalArr[{id:1,type:水果,name:苹果,money:10},{id:2,type:蔬菜,name:白菜,money:5},{id:3,type:水果,name:香蕉,money:15},// 同 type水果{id:4,type:肉类,name:猪肉,money:30},{id:5,type:蔬菜,name:萝卜,money:8},// 金额为字符串格式];// 调用函数按 type 分组合并 moneyconstmergedArrmergeObjectsByKey(originalArr,type,money);console.log(mergedArr);输出结果按 type 分组金额累加[{id:1,type:水果,name:苹果,money:25},// 10 15 25{id:2,type:蔬菜,name:白菜,money:13},// 5 8 13字符串自动转数字{id:4,type:肉类,name:猪肉,money:30}]关键说明分组逻辑用 Map 存储分组键为 groupKey 的值如 ‘水果’值为合并后的对象。Map 比普通对象更安全避免键名冲突支持数字 / 对象等类型的键。金额兼容通过 Number(item[moneyKey]) || 0 处理数字金额如 10直接使用字符串金额如 ‘8’自动转为数字缺失金额或非数字如 undefined、‘abc’视为 0。属性保留用 { …item } 浅拷贝原对象的所有属性如 id、name合并时仅更新金额其他属性保留第一个分组对象的值若需保留所有属性可修改为数组存储如 name: [‘苹果’, ‘香蕉’]。扩展需求保留分组内所有非金额属性如果需要保留同组所有对象的非金额属性如合并 name 为数组可修改函数functionmergeObjectsWithAllProps(arr,groupKey,moneyKey){constresultMapnewMap();arr.forEach(item{constkeyitem[groupKey];constcurrentMoneyNumber(item[moneyKey])||0;if(resultMap.has(key)){constexistingresultMap.get(key);existing[moneyKey]currentMoney;// 非金额属性转为数组去重Object.keys(item).forEach(prop{if(prop!groupKeyprop!moneyKey){if(!existing[prop].includes(item[prop])){existing[prop].push(item[prop]);}}});}else{constnewItem{[moneyKey]:currentMoney};// 分组键保留原值其他属性转为数组Object.keys(item).forEach(prop{newItem[prop]propgroupKey?item[prop]:[item[prop]];});resultMap.set(key,newItem);}});returnArray.from(resultMap.values());}扩展示例输出[{type:水果,id:[1,3],name:[苹果,香蕉],money:25},// ... 其他分组] 边界情况处理 原始数组为空返回空数组 部分对象缺失 groupKey按undefined分组 金额为0或负数正常累加符合业务逻辑 分组键为复杂类型如对象Map 可直接支持普通对象会转为字符串[object Object]不推荐用对象作为分组键。