如何将具有相同属性值的对象值推送到Javascript中的相同子数组?

时间:2019-06-07 11:00:09

标签: javascript html arrays

我不确定该问题标题的措辞如何,希望我的解释会更有意义。我有一个包含190个对象的数组,每个对象包含六个键和值,如下所示:

enter image description here

我的目标是创建一个以年份开始的数组,然后是该年的所有值,如下所示:

[
  [2000,16707,2416,8653,22176,1047,24096,27045,86019,27667,231],
  [2001,18249,2605,8458,22164,1181,24785,26497,85163,28912,316],
  [2002,.....]
  ...
]

现在,这是我的代码:

var dataNumbers = new Array();

for (var i = 0; i < data.length; i++) {
  if (data[i].Countries == country) {
    dataNumbers.push([data[i].Periods, data[i].Value])
  }
}

这将导致一个看起来像这样的数组:

[
  [2000,16707],
  [2000,2416],
  [2000,8653],
  [2000,22176],
  ...
  ...
]

如何对案例中的“期间”中匹配的所有数字进行分组?

1 个答案:

答案 0 :(得分:1)

您可以将一个对象作为哈希表以对同一Peroids进行分组,并获取哈希表的值作为结果。

result = Object.values(data.reduce((r, { Periods, Value }) => {
    r[Periods] = r[Periods] || [Periods];
    r[Periods].push(Value);
    return r;
}, {}));

使用Map的方法稍有不同。

result = Array.from(
    data.reduce((m, { Periods, Value }) => m.set(Periods, [...(m.get(Periods) || []), Value]), new Map),
    (k, v) => [k, ...v]
);