我如何遍历数组

时间:2020-04-15 12:54:42

标签: javascript object discord.js

我在遍历数组时遇到问题。我正在为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]}`);
       }
};

我是一名初学者,所以请解释比您平时更详细的内容。

3 个答案:

答案 0 :(得分:2)

您可以使用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));

您可以得到一个数组,每个内部数组都是另一个键-值对数组。现在,我们可以使用array destructuringfor...of这样的循环来获取每个键和值:

const object1 = {
  a: 'somestring',
  b: 42
};

for (let [key, value] of Object.entries(object1)) {
  console.log(`${key}: ${value}`);
}

// Returns:
// "a: somestring"
// "b: 42"

您可以看到,这现在可以正确返回所有键和值。我们只需要对其稍作修改即可满足您的要求,然后将所需的消息发送回去。

答案 1 :(得分:1)

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来查看对象结构。这会将您的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]));

答案 2 :(得分:0)

您在parent的右边,它将提供一个键/值对数组数组。请注意,这里的Object.entries试图访问的invValues[i[1]]的属性1可能是i。如果在这里使用undefined进行迭代,实际上可以避免一些麻烦。

forEach