Javascript 无法访问对象';s属性-对象

Javascript 无法访问对象';s属性-对象,javascript,node.js,javascript-objects,discord.js,Javascript,Node.js,Javascript Objects,Discord.js,我正在开发一个discord机器人,当时我正在发出“帮助”命令。我首先有一个commands数组,如果他们需要特定命令的帮助,我必须添加比我想要的更多的代码行。我想知道我是否可以像这样在我的物体里面放一个物体: const commands1 = { coinflip: { usage: prefix + "coinflip", description: `Flip a coin then guess what it landed on.` }

我正在开发一个discord机器人,当时我正在发出“帮助”命令。我首先有一个commands数组,如果他们需要特定命令的帮助,我必须添加比我想要的更多的代码行。我想知道我是否可以像这样在我的物体里面放一个物体:

const commands1 = {
    coinflip: {
        usage: prefix + "coinflip",
        description: `Flip a coin then guess what it landed on.`
    }
    diceroll: {
        usage: prefix + "diceroll (number)",
        description: `Roll a die and guess what it lands on`
    }
};
或者我必须做点别的,因为当我做的时候

for(var name in commands1){
    embed.addField("Command:", name)
}
这将列出所有可用的命令。但是,我无法访问用法或说明,我尝试了以下操作:

.addField("Usage:", name.usage)
.addField("Description:", name.description)

(它说未定义)我访问它是错误的还是我不能将对象放入对象中。对不起,我对这个比较陌生:)谢谢。

我找到了那个名字。是literal,它认为我正在试图访问commands1.name,而我需要commands1.coinflip。所以我就这么做了

console.log(commands1.coinflip.usage)

我发现了那个名字。是literal,它认为我正在试图访问commands1.name,而我需要commands1.coinflip。所以我就这么做了

console.log(commands1.coinflip.usage)

您正在循环中为…使用
,循环将遍历数组的索引。但真正的情况是你有
对象
。因此,在这种情况下,我建议您:

const命令s1={
coinflip:{
用法:前缀+“coinflip”,
描述:`抛一枚硬币,然后猜猜它落在什么上`
}
掷骰子:{
用法:前缀+“掷骰子(数字)”,
描述:`掷骰子,猜猜它落在什么地方`
}
};
常量键=对象键(commands1);//#输出:[“硬币翻转”、“骰子滚动”]
对于(让钥匙中的钥匙){
embed.addField(“命令:”,commands1[key]。用法);
}

您正在使用
for…in
循环,循环遍历数组的索引。但真正的情况是你有
对象
。因此,在这种情况下,我建议您:

const命令s1={
coinflip:{
用法:前缀+“coinflip”,
描述:`抛一枚硬币,然后猜猜它落在什么上`
}
掷骰子:{
用法:前缀+“掷骰子(数字)”,
描述:`掷骰子,猜猜它落在什么地方`
}
};
常量键=对象键(commands1);//#输出:[“硬币翻转”、“骰子滚动”]
对于(让钥匙中的钥匙){
embed.addField(“命令:”,commands1[key]。用法);
}

别担心自己是新手,我们都是从某个地方开始的

你的新手问题可能比我的好

const commands1 = {
    coinflip: {
        usage: prefix + "coinflip",
        description: `Flip a coin then guess what it landed on.`
    },
/* Added a missing , above */ 
    diceroll: {
        usage: prefix + "diceroll (number)",
        description: `Roll a die and guess what it lands on`
    }
};

for(var name in commands1){
    embed.addField("Command:", name);
    console.log(commands1[name].usage);
    console.log(commands1[name].description); /* You can Use your index to directly access the object thru the parent object. */ 
}

别担心自己是新手,我们都是从某个地方开始的

你的新手问题可能比我的好

const commands1 = {
    coinflip: {
        usage: prefix + "coinflip",
        description: `Flip a coin then guess what it landed on.`
    },
/* Added a missing , above */ 
    diceroll: {
        usage: prefix + "diceroll (number)",
        description: `Roll a die and guess what it lands on`
    }
};

for(var name in commands1){
    embed.addField("Command:", name);
    console.log(commands1[name].usage);
    console.log(commands1[name].description); /* You can Use your index to directly access the object thru the parent object. */ 
}

如果您是硬编码coinflip,您应该使用点表示法。如果将其作为变量传递(例如
name
),则可以使用查找语法(例如commands1[name].usage)进行查找。如果要硬编码,则应使用点表示法。如果您将其作为变量传递(例如,
name
),则可以使用查找语法(例如commands1[name]。用法)仅供参考:我的答案与上面Jai的答案相同。。。但是,在资源上更容易一点+更好的性能。我不会在内存中放置不必要的数据(例如:键)。而对于这个简单的示例。。。任何一种解决方案都非常有效-当解决方案扩展时。。。少就是多。仅供参考:我的答案看起来和上面Jai的一样。。。但是,在资源上更容易一点+更好的性能。我不会在内存中放置不必要的数据(例如:键)。而对于这个简单的示例。。。任何一种解决方案都非常有效-当解决方案扩展时。。。少即是多。谢谢,我所拥有的一切都很好,我只使用for循环查看命令名,这样它就可以列出所有命令。我查找他们输入的特定命令的部分只是
commands1[commandname]。用法
而且它工作起来很有魅力,我删除了不少代码行。谢谢,它与我所拥有的非常好,我只使用for循环查看命令名,这样它就可以列出所有命令。我查找他们输入的特定命令的部分只是
commands1[commandname]。用法
而且它工作起来很有魅力,我删除了不少代码行。