IMAGINE'S BLOG IMAGINE'S BLOG
首页
  • 原生JS

    • JavaScript
  • 前端框架扩展

    • Vue
    • React
    • UI组件库
  • HTML
  • CSS
  • 浏览器
  • 分类
  • 标签
  • 归档
  • 技术文档
  • GitHub相关
  • Nodejs
关于
  • 网站
  • 友情链接
GitHub (opens new window)

peng

平平无奇的web前端开发一枚
首页
  • 原生JS

    • JavaScript
  • 前端框架扩展

    • Vue
    • React
    • UI组件库
  • HTML
  • CSS
  • 浏览器
  • 分类
  • 标签
  • 归档
  • 技术文档
  • GitHub相关
  • Nodejs
关于
  • 网站
  • 友情链接
GitHub (opens new window)
  • JavaScript

    • javascript 之 this 指向问题
    • JS循环遍历方法
    • 前端常用公共方法工具类
    • JS声明提升
    • JS合并数组对象中key值相同的数据
      • 将数组里某个属性相同的对象合并到一个数组中
      • 实现方案
        • 方法一
        • 方法二
    • 数组对象求和
    • 前端路由实现
    • Promise(一):Promise 认识
    • Promise(二):手动实现一个 Promise
    • Promise(三):拓展方法实现
    • JS forEach踩坑
    • ES6-ES12 特性
    • async/await
    • JavaScript 数组去重
    • js对象排序
    • js if/else 语句优化策略
    • js深拷贝
    • 正则表达式校验
    • js笛卡尔积
    • Axios 封装
  • 框架扩展

  • 前端乱炖
  • JavaScript
peng
2022-09-02
目录

JS合并数组对象中key值相同的数据

# 将数组里某个属性相同的对象合并到一个数组中

原数组示例:

  let oldData = [
    {
      type:"篮球",
      value:20
    },
    {
      type:"跑步",
      value:40
    },
    {
      type:"游泳",
      value:10
    }
    {
      type:"跑步",
      value:15
    }
  ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

希望获得的数据格式(即将相同”type“值的对象合并为一个新的数组)
1
let resultData = [
  {
    type: "篮球",
    infoList: [
      {
        type: "篮球",
        value: 20,
      },
    ],
  },
  {
    type: "跑步",
    infoList: [
      {
        type: "跑步",
        value: 40,
      },
      {
        type: "跑步",
        value: 15,
      },
    ],
  },
  {
    type: "游泳",
    infoList: [
      {
        type: "游泳",
        value: 10,
      },
    ],
  },
];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

# 实现方案

# 方法一

let tempArr = [];
let data = [];
for (let i = 0; i < oldData.length; i++) {
  if (tempArr.indexOf(oldData[i].type) === -1) {
    data.push({
      type: oldData[i].type,
      infoList: [oldData[i]],
    });
    tempArr.push(oldData[i].type);
  } else {
    for (let j = 0; j < data.length; j++) {
      if (data[j].type == oldData[i].type) {
        data[j].infoList.push(oldData[i]);
        break;
      }
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 方法二

let infoList = {};
oldData.forEach((item, index) => {
  let { type } = item;
  if (!infoList[type]) {
    infoList[type] = {
      type,
      list: [],
    };
  }
  infoList[type].list.push(item);
});

let list = Object.values(infoList); // 转换后的数据
1
2
3
4
5
6
7
8
9
10
11
12
13
#JavaScript
上次更新: 2022/09/06, 10:30:04
JS声明提升
数组对象求和

← JS声明提升 数组对象求和→

最近更新
01
Axios 封装
09-06
02
MySQL数据库常用操作
09-06
03
解决element表格数据量过大导致页面渲染缓慢、卡顿问题
09-06
更多文章>
Theme by Vdoing | Copyright © 2020-2024 peng | IMAGINE
image | imgloc.com
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式