【问题标题】:Combine objects from an array with the same date into new array of objects using Javascript使用Javascript将具有相同日期的数组中的对象组合成新的对象数组
【发布时间】:2018-10-19 19:49:29
【问题描述】:

我有一个如下所示的对象数组:

var data = [
{Date: "01-01-2000", Banana: 10},
{Date: "01-01-2000", Apple: 15},
{Date: "01-01-2000", Orange: 20},
{Date: "01-02-2000", Banana: 25},
{Date: "01-02-2000", Apple: 30},
{Date: "01-02-2000", Orange: 35}];

我想知道如何将这个数组中的对象按相同的日期值合并,以便返回以下数组:

data = [
{Date: "01-01-2000", Banana: 10, Apple: 15, Orange: 20},
{Date: "01-02-2000", Banana: 25, Apple: 30, Orange: 35}];

如果这是一个重复的问题,我深表歉意,我只是无法找到每个对象中键和值对不同的示例,所以我想我至少会问一下。

【问题讨论】:

标签: javascript arrays object


【解决方案1】:

另一种方法是使用函数reduce 对对象进行分组,并使用函数Object.values 提取分组的对象。

var data = [{Date: "01-01-2000", Banana: 10},{Date: "01-01-2000", Apple: 15},{Date: "01-01-2000", Orange: 20},{Date: "01-02-2000", Banana: 25},{Date: "01-02-2000", Apple: 30},{Date: "01-02-2000", Orange: 35}],
    result = Object.values(data.reduce((a, c) => {
      a[c.Date] = Object.assign(a[c.Date] || {}, c);
      return a;
    }, {}));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • 这是正确的,非常感谢。我花了太多时间试图自己解决这个问题。
【解决方案2】:

或者,您可以使用 for 循环。

试试:

var data = [{Date: "01-01-2000", Banana: 10},{Date: "01-01-2000", Apple: 15},{Date: "01-01-2000", Orange: 20},{Date: "01-02-2000", Banana: 25},{Date: "01-02-2000", Apple: 30},{Date: "01-02-2000", Orange: 35}];
var obj = {};
for(var i = 0; i < data.length; i++){
   var date = data[i].Date;
   // Get previous date saved inside the result
   var p_date = obj[date] || {}; 
   // Merge the previous date with the next date
   obj[date] = Object.assign(p_date, data[i]);
}

// Convert to an array
var result = Object.values(obj);

console.log(result);

【讨论】:

    猜你喜欢
    • 2018-01-26
    • 1970-01-01
    • 1970-01-01
    • 2020-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    相关资源
    最近更新 更多