如何用JavaScript合并对象数组中的重复元素?请求技术帮助
解决数组按公司分组并整理型号数据的问题
没问题,我来帮你实现这个数组分组的需求!我们可以用JavaScript的reduce方法来高效完成这个聚合操作,下面是具体的实现代码和步骤解释:
完整实现代码
const myArr = [ { "Company": "Samsung", "model": "Galaxy S2", "screen_size": "5.5" }, { "Company": "Samsung", "model": "Galaxy S3", "screen_size": "5.5" }, { "Company": "Samsung", "model": "Galaxy S4", "screen_size": "5.5" }, { "Company": "Xiaomi", "model": "Redmi 2", "screen_size": "4.7" }, { "Company": "Xiaomi", "model": "Redmi 4", "screen_size": "5" }, { "Company": "Xiaomi", "model": "Redmi Note 4", "screen_size": "5.5" } ]; const groupedResult = Object.values(myArr.reduce((acc, item) => { // 检查当前公司是否已经在累加器中存在 if (!acc[item.Company]) { acc[item.Company] = { Company: item.Company, models: [] }; } // 按照你需要的格式创建单个型号的对象 const modelEntry = { [item.model]: { screen_size: item.screen_size } }; // 将型号对象添加到对应公司的models数组中 acc[item.Company].models.push(modelEntry); return acc; }, {})); console.log(groupedResult);
代码步骤解释
- 使用
reduce做分组:reduce是处理数组聚合的绝佳工具,这里我们用它遍历原始数组,把相同公司的数据聚合到一起。acc是我们的累加器对象,用来临时存储分组后的结果,初始值是空对象{}。 - 创建公司条目:如果当前遍历到的公司不在累加器中,我们就创建一个新的条目,包含公司名称和一个空的
models数组。 - 构建型号对象:利用JavaScript的计算属性名(
[item.model]),动态把型号名称作为对象的键,对应的值是包含screen_size的对象,这刚好匹配你想要的格式。 - 转换为最终数组:最后用
Object.values()把累加器这个对象转换成数组,因为我们需要的结果是数组格式,而不是以公司名为键的对象。
运行这段代码后,你就能得到完全符合预期的结果啦!
内容的提问来源于stack exchange,提问作者BharathKumarMurugan
相关产品推荐
相关产品推荐

