将子键值对添加到 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": []
}
然后您可以将数据添加到数组中。
试试这个 - 与您的要求类似,但具有有效的 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>
一直在绞尽脑汁,疯狂地谷歌搜索,但也许我没有使用正确的关键字进行搜索。
得到一个 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": []
}
然后您可以将数据添加到数组中。
试试这个 - 与您的要求类似,但具有有效的 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>