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