如何将数组中的对象,根据某个key值进行合并

发布于 2022-09-13 00:49:24 字数 278 浏览 13 评论 0

cc32a0b5acb3dfaf5be595dc81f84e0.png
上图为源数据

想得到如图所示的结果(想根据 time 这个属性合并数据)
c9eb472dc12109b3c3bd4d98553633a.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

清风不识月 2022-09-20 00:49:24

此类key相同的合并问题都可以使用hash法来处理,定义一个对象以检测key是否存在,利用数组里对象的指向引用,将hash对象改变影响数组里面的对象,一次循环即可

let arr = [{
      time: 0.1,
      h1: '11'
    }, {
      time: 0.5,
      h1: '22'
    }, {
      time: 1.5,
      h1: '33'
    }, {
      time: 0.1,
      h2: '330'
    }]

    let hash = {}

    const newArr = arr.filter(s => {
      if (hash[s.time]) {
        hash[s.time] = Object.assign(hash[s.time], s)
        return false
      } else {
        hash[s.time] = s
        return true
      }
    })
忘羡 2022-09-20 00:49:24
var arr = [
    {time:"a", a:1},
    {time:"a", b:2},
    {time:"b", a:1},
    {time:"b", b:6},
    {time:"c", a:10},
];

arr.reduce((p,c)=>{
    if(p.find(item=>item.time === c.time)){
        Object.assign(p.find(item=>item.time === c.time),c)
    }else{
        p.push(c)
    }
    return p
},[])
逆夏时光 2022-09-20 00:49:24
let list = [
  { time: 0.1, h1: 322 },
  { time: 0.1, h2: 122 },
  { time: 0.3, h1: 22 },
  { time: 0.1, h4: 562 },
  { time: 2.1, h1: 22 },
  { time: 3.1, h1: 32 },
  { time: 2.1, h1: 321 },
];
let newList = list.reduce((a, c) => {
  let index = a.findIndex((e) => e.time == c.time);
  if (index != -1) {
    a[index] = { ...a[index], ...c };
  } else {
    a.push(c);
  }
  return a;
}, []);
console.log("newList: ", newList);

image.png

唱一曲作罢 2022-09-20 00:49:24

代码

var list = [{time:1.5,h1:'33'},{time:1.5,h2:'833'},{time:0.1,h1:'11'}]
Object.values(list.reduce((acc,cur)=>(Object.assign((acc[cur.time]||={}),cur),acc),[]))

结果

0: {time: 1.5, h1: "33", h2: "833"}
1: {time: 0.1, h1: "11"}
何以畏孤独 2022-09-20 00:49:24

测试数据

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文