我在Splice上遇到问题,我认为我没有正确理解这一点。假设我有17个项目的数组。我正在使用Splice函数将其拆分为两个数组。
let splicedItems = items.splice(0, 7);
如果我有商品0-17
,则应删除商品0-6
(7个商品)
然后,我在菜单上有一个用于下一步的按钮,然后应该再次进行拼接,但事实并非如此。我知道下一个按钮将传递所有信息,并且在下一页项目中读取时,我的数组长度为10。
我正在调用代码的第一部分,将其发送出去然后调出并显示下一个项目列表。第一部分工作正常,并显示7个项目。但是,我还有10个项目,而且我无法拆分代码,而且菜单也没有显示。
export function showPlayerInventory(itemJson: string){
mp.gui.chat.push("showpinv");
ContextMenu.DrawMenu.Reset();
ToggleCursor(true);
let items: Interfaces.GameItem[] = JSON.parse(itemJson);
invMenuItems = items;
let cursorpos = mp.gui.cursor.position;
if(!Array.isArray(items)){
return;
}
items.sort();
if(items.length > 7)
{
let splicedItems = items.splice(0, 7);
invMenuItems = items;
let nextJson = JSON.stringify(items);
splicedItems.forEach((value, index, array) => {
if (value == null)
return;
if(value.Quantity > 1){
ContextMenu.DrawMenu.CreateOption(`${value.Name} (${value.Quantity})`, ["SelectOwnInventoryItem", value]);
}
else{
ContextMenu.DrawMenu.CreateOption(`${value.Name}`, ["SelectOwnInventoryItem", value]);
}
});
ContextMenu.DrawMenu.CreateOption("Next", ["SelectOwnInventoryItem", "next", items]);
ContextMenu.DrawMenu.CreateOption("Exit", ["SelectOwnInventoryItem", "exit"]);
ContextMenu.DrawMenu.Ready(true, cursorpos);
return;
}
else
{
items.forEach((value, index, array) => {
if (value == null)
return;
if(value.Quantity > 1){
ContextMenu.DrawMenu.CreateOption(`${value.Name} (${value.Quantity})`, ["SelectOwnInventoryItem", value]);
}
else{
ContextMenu.DrawMenu.CreateOption(`${value.Name}`, ["SelectOwnInventoryItem", value]);
}
});
ContextMenu.DrawMenu.CreateOption("Exit", ["SelectOwnInventoryItem", "exit"]);
ContextMenu.DrawMenu.Ready(true, cursorpos);
return;
}
return;
}
第二部分
export function showNextInventory(items: Interfaces.GameItem[]){
mp.gui.chat.push("showninv");
ContextMenu.DrawMenu.Reset();
ToggleCursor(true);
let cursorpos = mp.gui.cursor.position;
if(!Array.isArray(items)){
return;
}
mp.gui.chat.push(items.length.toString());
items = invMenuItems;
if(items.length > 7)
{
let splicedItems = items.splice(0, 7);
invMenuItems = items;
splicedItems.forEach((value, index, array) => {
if (value == null)
return;
if(value.Quantity > 1){
ContextMenu.DrawMenu.CreateOption(`${value.Name} (${value.Quantity})`, ["SelectOwnInventoryItem", value]);
}
else{
ContextMenu.DrawMenu.CreateOption(`${value.Name}`, ["SelectOwnInventoryItem", value]);
}
});
ContextMenu.DrawMenu.CreateOption("Next", ["SelectOwnInventoryItem", "next", items]);
ContextMenu.DrawMenu.CreateOption("Exit", ["SelectOwnInventoryItem", "exit"]);
ContextMenu.DrawMenu.Ready(true, cursorpos);
return;
}
else
{
items.forEach((value, index, array) => {
if (value == null)
return;
if(value.Quantity > 1){
ContextMenu.DrawMenu.CreateOption(`${value.Name} (${value.Quantity})`, ["SelectOwnInventoryItem", value]);
}
else{
ContextMenu.DrawMenu.CreateOption(`${value.Name}`, ["SelectOwnInventoryItem", value]);
}
});
ContextMenu.DrawMenu.CreateOption("Exit", ["SelectOwnInventoryItem", "exit"]);
ContextMenu.DrawMenu.Ready(true, cursorpos);
return;
}
return;
}