javascript合并数组中相同的数据

题目描述

原数据:

var a = [["03-12", "33.87"]
 ["03-15", "34.67"]
 ["03-18", "1.13"]
 ["03-18", "1.00"]
 ["03-18", "1.00"]]

得出

 [["03-12", "33.87"]
 ["03-15", "34.67"]
 ["03-18", "3.13"]]

这个时间是不一定的. 这只是做个实例

求大神指导下

题目来源及自己的思路

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

你期待的结果是什么?实际看到的错误信息又是什么?

问题描述

问题出现的环境背景及自己尝试过哪些方法

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

你期待的结果是什么?实际看到的错误信息又是什么?

阅读 3.1k
4 个回答

clipboard.png

想法的话就是日期做 key 。然后遍历一下,存在就相加。不存在就赋值。然后导出一下就 ok 。如果要字符串就 map 再处理一把。

a = [["03-12", "33.87"],
 ["03-15", "34.67"],
 ["03-18", "1.13"],
 ["03-18", "1.00"],
 ["03-18", "1.00"]]
obj = {};
a.forEach(v=>{
    if(obj[v[0]]){
        obj[v[0]] += +v[1]
    }else{
        obj[v[0]] = +v[1]
    }
})
console.log(Object.entries(obj))

用一个for循环遍历数组,然后把结果写入一个Map中,Map的key就是数组第一个元素,value是结果数据。具体代码不写了。

代码如下
var a = [
        ["03-12", "33.87"],
        ["03-15", "34.67"],
        ["03-18", "1.13"],
        ["03-18", "1.00"],
        ["03-18", "1.00"]
    ]
    function getArr(arr){
        let obj = {}
        arr.map(item=>{
            if(!obj[item[0]]){
                obj[item[0]] = item[1]*1
            }else{
                obj[item[0]] += item[1]*1
            }
        })
        let b = []
        for(var i in obj){
            b.push([i,`${obj[i]}`])
        }
        return b
    }
    console.log(getArr(a))

大致思路就是建一个对象,判断是否有这个属性,没有则给对象添加,有则相加。最后再变成数组。可能比较麻烦。

const merge = arr =>
  arr.reduce((acc, cur) => {
    let hasCurTime = false
    acc.forEach((v, i) => {
      if (v[0] === cur[0]) {
        v[1] = v[1] * 1 + cur[1] * 1
        hasCurTime = true
      }
    })
    !hasCurTime && acc.push(cur)
    return acc
  }, [])
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题