Javascript:从一系列详细信息对象创建摘要对象

时间:2013-09-28 08:06:26

标签: javascript arrays object

我正在迭代一堆看起来像这样的对象:

var tests = [{ date: 1379082017487,
  summary:
    {'Item A': 2069,
     'Item B': 8987,
     'Item C': 1890
    }},
{date: 1379082015968,
  summary:
    {'Item A': 1824,
     'Item B': 6758,
     'Item C': 3857
    }}];

我需要将数据组合成具有相同键的单个对象,以及包含组合值的数组:

{ date: [1379082017487, 1379082015968],
  summary:
   { 'Item A': [2069, 1824],
     'Item B': [8987, 6758],
     'Item C': [1890, 3857]
   }
}

到目前为止,我的策略是创建一个嵌套循环;迭代顶级对象并将其值添加到'date'数组中。然后迭代'summary'对象,将这些值推送到表示每个键的数组。最后,我将数组重新添加到一起形成我的单个输出对象。

我的大脑冻结在内部阵列上。它可以有不同数量的键('项目')。虽然这些键在任何给定的代码运行中对于所有对象都具有相同的名称,但它们在运行之间可以具有不同的名称。内部循环不生成数组(如[2069,1824])。

到目前为止,我有:

var testDates = [];
var itemVals = [];
// iterate over the outer objects
for (var record = 0; record < tests.length; record++) {
    testDates.push(tests[record].date); // this works fine

    // iterate over the inner 'summary' object:
    for (var itemName in tests[record]['summary']) {
        // doesn't produce the appropriate array
        itemVals.push([tests[record]['summary'][itemName]]);
    }

}

感谢您的任何建议!

1 个答案:

答案 0 :(得分:0)

我已经为您的问题编写了示例代码。请尝试这个,让我知道它是否有效

var tests = [{
  date: 1379082017487,
  summary: {
    'Item A': 2069,
    'Item B': 8987,
    'Item C': 1890
  }
}, {
  date: 1379082015968,
  summary: {
    'Item A': 1824,
    'Item B': 6758,
    'Item C': 3857
  }
}];
var json = {
  date: [],
  summary: {}
};
for (var i = 0; i < tests.length; i++) {
  var dateJSON = tests[i];
  json.date.push(dateJSON.date);
  for (var key in dateJSON.summary) {
    if (dateJSON.summary.hasOwnProperty(key)) {
      if (json.summary[key] == null) {
        json.summary[key] = [];
      }
      json.summary[key].push(dateJSON.summary[key]);
    }
  }
}