要将数组中具有相同属性值的对象中的num属性合并到一个数组中

文章内容描述了一个名为`list`的数组,其中包含多个对象,每个对象表示某个气象站在一个特定时间点的温度记录。使用`reduce`方法对这些数据进行处理,将具有相同station的记录合并,累计每个station的温度计数值。
摘要由CSDN通过智能技术生成
const list = [
  {
                "station": "张三",
                "num": "0",
                "timeTemp": "2024-03-05 00:00"
            },
            {
                "station": "李四",
                "num": "0",
                "timeTemp": "2024-03-05 00:00"
            },
            {
                "station": "张三",
                "num": "0",
                "timeTemp": "2024-03-05 01:00"
            },
            {
                "station": "李四",
                "num": "0",
                "timeTemp": "2024-03-05 01:00"
            },
            {
                "station": "李四",
                "num": "0",
                "timeTemp": "2024-03-05 01:00"
            },
            {
                "station": "王五",
                "num": "0",
                "timeTemp": "2024-03-05 01:00"
            },
            {
                "station": "王五",
                "num": "0",
                "timeTemp": "2024-03-05 01:00"
            },
            {
                "station": "张三",
                "num": "0",
                "timeTemp": "2024-03-05 02:00"
            },
            {
                "station": "王五",
                "num": "0",
                "timeTemp": "2024-03-05 02:00"
            },
            {
                "station": "张三",
                "num": "0",
                "timeTemp": "2024-03-05 02:00"
            },
            {
                "station": "张三",
                "num": "0",
                "timeTemp": "2024-03-05 02:00"
            },
];
const result = list.reduce((accumulator, currentItem) => {
  // 查找累积器中是否已经有一个与当前项具有相同station的对象
  const found = accumulator.find(item => item.station === currentItem.station);
  if (found) {
    // 如果找到了,将当前项的num添加到找到的对象的num数组中
    if (!Array.isArray(found.num)) {
      found.num = [found.num]; // 如果num还不是数组,则先将其转换为数组
    }
    found.num.push(currentItem.num); // 添加num到数组中
  } else {
    // 如果没有找到,则创建一个新对象并将其添加到累积器中
    accumulator.push({ ...currentItem, num: [currentItem.num] });
  }
  return accumulator;
}, []); // 初始值是一个空数组
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以使用reduce方法来实现这个功能。假设有一个包含多个对象数组,每个对象都有一个相同属性字段,可以按照以下步骤来实现统计相同属性字段的的和: 1. 使用reduce方法遍历数组,将每个对象属性作为key,属性作为value存储在一个新的对象。 2. 在reduce方法的回调函数,如果当前key已经存在于新对象,则将其对应的value加上当前对象属性,否则将当前key和属性作为新的键对添加到新对象。 3. 最后返回新对象,其每个属性字段的都是原数组中对应字段的总和。 下面是一个示例代码: ```javascript const arr = [ { name: 'apple', num: 2 }, { name: 'banana', num: 3 }, { name: 'apple', num: 4 }, { name: 'orange', num: 1 }, { name: 'banana', num: 5 } ]; const result = arr.reduce((acc, cur) => { const key = cur.name; if (acc[key]) { acc[key] += cur.num; } else { acc[key] = cur.num; } return acc; }, {}); console.log(result); // { apple: 6, banana: 8, orange: 1 } ``` 在上面的代码,我们使用reduce方法遍历数组`arr`,并将每个对象的`name`属性作为key,属性`num`作为value存储在新对象`acc`。如果当前key已经存在于新对象,则将其对应的value加上当前对象属性,否则将当前key和属性作为新的键对添加到新对象。最后返回新对象`acc`,其每个属性字段的都是原数组中对应字段的总和。 运行上面的代码,将输出一个对象,其每个属性字段的都是原数组中对应字段的总和。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值