2015-05-31 266 views
-1

在隨機表決我的問題並提示我使用拼接之前,可能實際上讀取了我正在嘗試執行的操作。謝謝。刪除數組的元素

我正在寫一個node.js聊天機器人和我需要刪除數組的特定元素之一的命令。

這是命令如何工作:

中的項目「富」,「酒吧」,「巴茲」被添加到稱爲raidLoot陣列。對於這些數組元素中的每一個,都會創建一個數組,供用戶添加,併爲每個數組選擇一個隨機用戶。因此,如果我有raidLoot = [foo]和另一個名爲foo = [userA,userB,userC]的數組,則在選擇其中一個用戶後,應從raidLoot中刪除'foo'。

這是相關代碼

case 'loot': 
    query(connection, 'SELECT * FROM channel WHERE name = "' + userName + '"').done(function (result) { 
     if (result[0].length !== 0) { 
      if (args[1] === 'clear') { 
       raidLoot = [] 
       send_PRIVGRP_MESSAGE(botId, userName + ' cleared the loot list') 
      } else { 
       raidLoot.push(args.slice(1).join(' ')) 
       send_PRIVGRP_MESSAGE(botId, userName + ' added ' + args.slice(1).join(' ') + ' to slot #' + raidLoot.length + '. Use !add ' + raidLoot.length + ' to join ') 
       lootSlot[raidLoot.length] = [] 
      } 


     } else { 
      send_MESSAGE_PRIVATE(userId, 'You have to join the channel first') 
     } 
    }) 

    break; 

而這正是我的問題是:

exports.flatroll = flatroll = function (userId, args) { 
    if (raidLoot.length === 0) { 
     send_MESSAGE_PRIVATE(userId, 'There is no loot') 
     return 
    } 
    connectdb().done(function (connection) { 
     checkAccess(userId).done(function (result) { 
      userAc = result 
      access_req(connection, 'rem').done(function (result) { 
       if (result[0].length === 0 || result[0].length > 0 && result[0][0].status === 'enabled') { 
        if (result[0].length === 0 || result[0][0].access_req <= userAc) { 
         getUserName(connection, userId).done(function (result) { 
          userName = result[0][0].name 
          if (!args) { 
           winnerList = '<center> <font color=#FFFF00> :::Flatroll Results::: </font> </center> \n' 
           for (loot in raidLoot) { 
            winnerList += '<font color=#00FFFF>Slot #' + (+loot + 1) + '</font> \n' 
            winnerList += 'Item: ' + raidLoot[loot] + '\n' 
            if (lootSlot[+loot + 1].length === 0) { 
             winnerList += 'Winner: No one added \n' 
            } else { 
             winnerList += 'Winner:</font><font color=#00FF00>' + _.sample(lootSlot[+loot + 1]) + '</font> \n' 
             lootSlot[+loot + 1] = [] 
             raidLoot.splice(loot, 1) // This is the line I need a better alternative for. 
            } 

            winnerList += '<img src=tdb://id:GFX_GUI_FRIENDLIST_SPLITTER>\n' 

           } 
           send_PRIVGRP_MESSAGE(botId, blob('Winner List', winnerList)) 
           connection.release() 
          } // else with args 
         }) 
        } else { 
         connection.release() 
         send_MESSAGE_PRIVATE(userId, 'Access Denied') 
        } 
       } else { 
        connection.release() 
        send_MESSAGE_PRIVATE(userId, 'Command Disabled') 
       } 
      }) 
     }) 
    }) 
} 

'raidLoot.splice(搶劫,1)' 這確實工作它應該怎樣,但結果不是我所需要的,如果添加了多個項目並且用戶只加入其中一個項目,那麼顯示的列表將包含除最後一個項目以外的所有項目,修改raidLoot的長度以便循環不會到達最後一個項目並且如此多項目,少顯示。

我是新節點,做這個項目的方式來學習,所以不要在惡劣的我福利局代碼:)

+0

請節點+ HTML4傷害我的眼睛。 – moonwave99

+1

html用於遊戲內的窗口,這個bot是MMORPG,沒有別的選擇,因爲它只接受非常基本的html。 – Trax

回答

0

看來,它的作品,如果我在2個獨立的迴路分開for循環,提取勝利者1名,取消獲勝者名單的第二名。

if (!args) { 
    winnerList = '<center> <font color=#FFFF00> :::Flatroll Results::: </font> </center> \n' 
    var rl = raidLoot 
    for (i = 0; i < rl.length; i++) { 
     winnerList += '<font color=#00FFFF>Slot #' + (i + 1) + '</font> \n' 
     winnerList += 'Item: ' + raidLoot[i] + '\n' 
     if (lootSlot[i + 1].length === 0) { 
      winnerList += 'Winner: No one added \n' 
     } else { 
      shuffleUsers = _.shuffle(lootSlot[i + 1]) 
      console.log(shuffleUsers) 
      winnerList += 'Winner:</font><font color=#00FF00>' + _.sample(shuffleUsers) + '</font> \n' 
     } 

     winnerList += '<img src=tdb://id:GFX_GUI_FRIENDLIST_SPLITTER>\n' 

    } 
    send_PRIVGRP_MESSAGE(botId, blob('Winner List', winnerList)) 

    for (i = 0; i < rl.length; i++) { 
     if (lootSlot[i + 1].length > 0) { 
      lootSlot[i + 1] = [] 
      raidLoot = _.without(raidLoot, rl[i]) 
     } 
    } 
    connection.release() 
    }