将子键值对添加到 javascript 中的现有数组(或 JSON 对象?)

Adding subkey-value pairs to existing array (or JSON object?) in javascript

一直在绞尽脑汁,疯狂地谷歌搜索,但也许我没有使用正确的关键字进行搜索。

得到一个 list/array/JSON 序列化数据(此时并不重要),如下所示:

{ 
  "program": 1,
  "program": 2,
  "program": 3
}

我正在通过基于节点的 socket.io 接收一系列 JSON 对象,看起来像这样:

{ "program": 1, "sequence_number": 1 }
{ "program": 3, "sequence_number": 2 }
{ "program": 3, "sequence_number": 1 }
{ "program": 2, "sequence_number": 2 }
{ "program": 2, "sequence_number": 1 }
{ "program": 2, "sequence_number": 3 }

我无法弄清楚的是能够 push/inject/merge 这个传入的 JSON (每次收到一个)到我上面的列表中以创建以下内容:

{ 
  "program": 1,
    { 
      "sequence_number": 1
    },
  "program": 2,
    {  
      "sequence_number": 2,
      "sequence_number": 1,
      "sequence_number": 3
    },
  "program": 3,
    {
      "sequence_number": 2,
      "sequence_number": 1
    }
}

它是类似于 "on the tip of the tongue" 但已经碰壁的事情之一。因此,我呼吁社区提供一些智慧的花絮、受欢迎的解决方案,或者用任何已知的相关教程指明正确的方向。提前致谢!

更新08.Oct.2016

为了解决关于我的列表格式错误的评论,如何重组数据,如下所示:

{
  "program": 1,
  "sequence_list": 
  [
    { "sequence_number": 1 },
    { "sequence_number": 2 }
  ]
},
{
  "program": 2,
  "sequence_list": 
  [
    { "sequence_number": 1 },
    { "sequence_number": 3 },
    { "sequence_number": 2 }
  ]
}
... etc.

这样更有意义吗?

至于可以换底的解决方法:

{ 
  "Program 1": [],
  "Program 2": [],
  "Program 3": []
}

然后您可以将数据添加到数组中。

Check this plunker

试试这个 - 与您的要求类似,但具有有效的 Javascript 个对象。

var target = { 
  "program1": [],
  "program2": [],
  "program3": []
};

var source = [
  { "program": 1, "sequence_number": 1 },
  { "program": 3, "sequence_number": 2 },
  { "program": 3, "sequence_number": 1 },
  { "program": 2, "sequence_number": 2 },
  { "program": 2, "sequence_number": 1 },
  { "program": 2, "sequence_number": 3 }
];

for (var i=0; i<source.length; i++) {
 item = source[i];
  if (target.hasOwnProperty("program" + item.program)) {
   target["program" + item.program].push(
     {"sequence_number": item.sequence_number}
    );
  }
}

document.getElementById("out").innerHTML = "<pre>" + JSON.stringify(target, null, 2) + "</pre>";
<div id="out">
</div>