簡體   English   中英

如何循環遍歷數組

[英]How can I loop through an array

我在遍歷數組時遇到問題。 我正在為 Discord 制作一個 RPG 機器人,我需要在出現提示時顯示玩家的inventory 我試過使用Object.values()Object.map()Object.entries() 這些items的名稱已經用Object.keys(inventory)計算出來,但是values是問題所在。

var invItems = Object.keys(inventory);
var InvValues = Object.entries(inventory);
for (var i = 0; i <= invItems.length; i += 1) {
       if (invValues[i[1]] > 0) {
           message.channel.send(`${invValues[i[1]]}x ${invItems[i]}`);
       }
};

我是一個初學者,所以請比你通常做的更詳細地解釋。

您可以使用for...of循環直接向message.channel發送值,例如:

for (let [key, value] of Object.entries(inventory)) {
  if (value > 0) {
    message.channel.send(`${value}x ${key}`);
  }
}

解釋:

Object.entries()方法返回給定對象自己的可枚舉字符串鍵控屬性 [key, value] 對的數組。 所以,當我們像這樣使用它時:

 const object1 = { a: 'somestring', b: 42 }; console.log(Object.entries(object1));

你可以得到一個數組,每個內部數組都是另一個鍵值對數組。 現在,我們可以使用數組解構for...of循環來獲取每個鍵和值,例如:

 const object1 = { a: 'somestring', b: 42 }; for (let [key, value] of Object.entries(object1)) { console.log(`${key}: ${value}`); } // Returns: // "a: somestring" // "b: 42"

您現在可以看到這會正確返回所有鍵和值。 我們只需對其進行一些修改以符合您的要求並發送回所需的消息。

var invItems = Object.keys(inventory);
var invValues = Object.entries(inventory); // fixed the capital i

for (var i = 0; i <= invItems.length; i += 1) {

   if (invValues[i] > 0) {
       message.channel.send(`${invValues[i]}x ${invItems[i]}`);
   }
};

您沒有使用i作為索引,而是嘗試像訪問數組一樣訪問i[1]

此外,在 Javascript 中,您還可以執行JSON.stringify以查看 object 結構。 這會將您的inventory打印到JSON String

//this may help you see what the inventory looks like
for(let i = 0; i<inventory.length; i+=1)
console.log(JSON.stringify(inventory[i]));

您在Object.entries的正確軌道上,它將提供一組鍵/值對 arrays。 請注意,此處: invValues[i[1]]您試圖訪問i的屬性1可能是undefined 如果在此處使用forEach進行迭代,實際上可以避免一些復雜性。

 const inventory = { itemA: 'description for A', itemB: 'description for B' } Object.entries(inventory).forEach(([key, value]) => { // replace with message.channel.send(...) console.log(`${key}: ${value}`) })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM