[英]Push into an array of arrays which has an array of arrays
我目前有一个多人网络游戏的数组,如下所示:
[
[
"<some value>",
"<some value>",
"<some value>",
[
[
<some value>,
<some value>,
<some value>,
<some value>
]
]
]
]
所以 myArray[0][2][0] 保存了关于 1 个玩家的信息。
我使用以下代码
var TempPlayerArrayToAdd = [<some value>, <some value>, <some value>, <some value>];
myArray[0][2].push(TempPlayerArrayToAdd);
但这会导致错误,即.push is not a function
,即使在检查 MDN 文档后,我也无法弄清楚如何正确使用它。
想要的结果是
[
[
"<some value>",
"<some value>",
"<some value>",
[
[
<some value>,
<some value>,
<some value>,
<some value>
],
[
<some value>,
<some value>,
<some value>,
<some value>
]
]
]
]
谢谢你的时间 :)
理想情况下,您希望更改数据结构以使用对象数组,其中每个对象都有一个包含其子对象数组的属性( children
是此属性的通用名称)。
但首先,您实际遇到的问题是:由于您的条目可能是数组或非数组(示例中的字符串),您需要检查您想要的每个位置的值是否为数组,如果不是,让它成为一个。
所以例如:
let entry = myArray[0];
if (!Array.isArray(entry)) {
entry = myArray[0] = [entry];
}
entry = entry[2];
if (!Array.isArray(entry[2])) {
entry = entry[2] = [entry];
}
entry.push(...toAdd); // Or in ES5: entry.push.apply(entry, toAdd);
现场示例:
var myArray = [ [ "<some value>", "<some value>", "<some value>", [ [ "<some value>", "<some value>", "<some value>", "<some value>" ] ] ] ]; var toAdd = ["<some value>", "<some value>", "<some value>", "<some value>"]; let entry = myArray[0]; if (!Array.isArray(entry)) { entry = myArray[0] = [entry]; } entry = entry[2]; if (!Array.isArray(entry[2])) { entry = entry[2] = [entry]; } entry.push(...toAdd); // Or in ES5: entry.push.apply(entry, toAdd); console.log(myArray);
您可以看到这是有问题的,因此我建议改用对象:
toAdd = toAdd.map(value => ({value, children: []}));
myArray[0].children[2].children.push(...toAdd);
现场示例:
var myArray = [ { value: null, children: [ { value: "<some value>", children: [] }, { value: "<some value>", children: [] }, { value: "<some value>", children: [] }, { value: "<some value>", children: [ "<some value>", "<some value>", "<some value>", "<some value>" ] } ] } ]; var toAdd = ["<some value>", "<some value>", "<some value>", "<some value>"]; toAdd = toAdd.map(value => ({value, children: []})); myArray[0].children[2].children.push(...toAdd); /* Or in ES5: toAdd = toAdd.map(function(value) { return {value: value, children: []}; ); let children = myArray[0].children[2].children; children.push.apply(children, toAdd); */ console.log(myArray);
.as-console-wrapper { max-height: 100% !important; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.