簡體   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