繁体   English   中英

推入具有数组数组的数组数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM