微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

添加到数组的对象变得不确定

如何解决添加到数组的对象变得不确定

因此,我正在为discord机器人的命令编写一些代码,该命令将对象添加到存储在JSON文件中的对象数组中。这是实现以下目的的代码

let rawdata = fs.readFileSync('config.json');
let blacklist = JSON.parse(rawdata);

var newWord = {"word": args[3],"count": 0}
blacklist.words.push(newWord);

let data = JSON.stringify(blacklist);
fs.writeFileSync('config.json',data);

这是在命令(args[3])中获得第四个单词,并将其放入对象({"word": args[3],"count": 0})中,然后将其添加到JSON文件中的对象列表中。可行,但是当我然后尝试获取此对象列表时,由机器人添加的对象将返回为undefined

这是JSON文件

{"words":[{"string":"test","count":0},{"word":"abc","count":0}]}

列表{"string":"test","count":0}中的第一个对象是我在创建文件时手动添加的,而第二个对象{"word":"abc","count":0}是由漫游器添加的。

这是我用来获取对象列表的代码

var words = ""
for (i = 0; i < blacklist.words.length; i++) {
    words += "- " + blacklist.words[i].string + "\n";
    console.log(blacklist.words[i].string);
}
message.reply("here are the words in your blacklist:\n" + words);

这是结果:

result of the above code

我对JavaScript还是很陌生,并且在异步特性方面遇到了麻烦,所以我确定自己做错了什么。

解决方法

如果仔细观察,您会在JSON生成的文件中定义两个不同的键:stringword。在这种情况下,您只会看到string的值为test。另一个对象没有string的密钥。

您可以做的是1.更改键以使其匹配或2.通过内联if / else使用两个键。

for (i = 0; i < blacklist.words.length; i++) {
    words += "- " + blacklist.words[i].string + "\n";
    console.log(blacklist.words[i].string || blacklist.words[i].word);

}
,
for (i = 0; i < blacklist.words.length; i++) {
    words += "- " + blacklist.words[i].string + "\n";
    console.log(blacklist.words[i].string);
}

此代码要访问黑名单对象的单词数组的“字符串”键。 检查您的JSON文件第二个元素的密钥,它不是“字符串”

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。