首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修改此函数来合并key的值?

如何修改此函数来合并key的值?
EN

Stack Overflow用户
提问于 2016-11-24 19:02:41
回答 1查看 35关注 0票数 0

我希望合并对象"userName“中的"year”键的值。

我有以下对象数组

代码语言:javascript
复制
userName=[{
            loginName:'jimmy',
            deviation:[{dates:[20150222,20150223,20150224,20150225], type:'vacation'}],
            year:'2015'
          },
         {
           loginName:'jimmy',
           deviation:[{dates:[20150322,20150323,20150324,20150325], type:'sick'}],
           year:'2016'
         },
         {
          loginName:'chloe',
          deviation:[{dates:[20150222,20150221,20150224,20150225], type:'national free day'}],
          year:'2016'
         },
        ];      

通过使用此函数,我能够根据loginName对偏差日期进行排序。因此,在这种情况下,用户'jimmy‘将只显示一次,但所有的销毁日期和类型组合在一起。但是,关键字'year‘的值只继承第一个值,并保持不变。如何合并关键字' year ',使用户'jimmy‘的year通过修改当前函数显示'2015,2016’:

代码语言:javascript
复制
var mergedUsername = [];

    userName.forEach(function(deviation) { 
       var existing = mergedUsername.filter(function(v, i) { 
       return v.loginName == deviation.loginName; 
       }); 
    if(existing.length) {
      var existingIndex = mergedUsername.indexOf(existing[0]);
      mergedUsername[existingIndex].deviation = mergedUsername[existingIndex].deviation.concat(deviation.deviation); 
    }  else {
        if(typeof deviation.deviation == 'string')
        deviation.deviation = [deviation.deviation];
        mergedUsername.push(deviation);  
     }
    });

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2016-11-24 19:16:56

您可以使用reduce()来获得想要的结果。

代码语言:javascript
复制
var data = [{
  loginName: 'jimmy',
  deviation: [{
    dates: [20150222, 20150223, 20150224, 20150225],
    type: 'vacation'
  }],
  year: '2015'
}, {
  loginName: 'jimmy',
  deviation: [{
    dates: [20150322, 20150323, 20150324, 20150325],
    type: 'sick'
  }],
  year: '2016'
}, {
  loginName: 'chloe',
  deviation: [{
    dates: [20150222, 20150221, 20150224, 20150225],
    type: 'national free day'
  }],
  year: '2016'
}];

var o = {}
var result = data.reduce(function(r, e) {
  if (!o[e.loginName]) {
    o[e.loginName] = e;
    r.push(o[e.loginName]);
  } else {
    o[e.loginName].deviation[0].dates.push(...e.deviation[0].dates)
    o[e.loginName].deviation[0].type += ' ' + e.deviation[0].type
    o[e.loginName].year += ' ' + e.year
  }
  return r;
}, [])

console.log(result)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40784729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档