[英]Javascript - JSON file returning [object Object]
由于某些原因,当我尝试调用命令时,它将返回[object Object],[object, Object]
fs.readFile(path.join(__dirname, "../moderation") + "/modlogs.json", "utf-8", function(err, data) { // read the JSON file
if (err) throw err; // throw error if applicable
var arrayOfObjects = JSON.parse(data); // parse the data
for (let i = 0; i < arrayOfObjects.warns.length; i++) { // loop through all keys in warns file
if (arrayOfObjects.warns[i].user_id === user.id) { // check if the user has already been warned
message.reply("User already warned. Kicking user."); // display kick
//message.guild.member(user).kick(); // kicks member
indexOfUser = arrayOfObjects.warns.findIndex(x => x.user_id == user.id); // find the index of the users object
//message.channel.sendMessage(indexOfUser);
message.channel.sendMessage("Before splicing" + arrayOfObjects.warns);
//arrayOfObjects.warns.splice(indexOfUser, 1); // remove the user from warns array
message.channel.sendMessage("After splicing" + arrayOfObjects.warns);
return;
};
};
这行//arrayOfObjects.warns.splice(indexOfUser, 1); // remove the user from warns array
//arrayOfObjects.warns.splice(indexOfUser, 1); // remove the user from warns array
应该从我的JSON文件中的warns
数组中删除该对象。 但是事实并非如此, console.log
只是为了查看正在输出的内容,似乎值没有通过。
我认为问题在于,当您尝试查找索引时,您使用的是findIndex()而不是indexOf()。
Array.prototype.indexOf()需要一个值作为第一个参数。 这是在原始类型数组中查找索引的不错选择。
Array.prototype.findIndex()需要将回调作为第一个参数。 如果您需要非原始类型(例如对象)类型的数组中的索引,或者查找条件比值更复杂,请使用此方法。
有关两种情况的示例,请参见链接。 帖子中的信息
编辑:
我带给你一些有用的代码。
使用indexOf()
if (arrayOfObjects.warns.indexOf(user_id) > -1) { // check if the user has already been warned
message.reply("User already warned. Kicking user."); // display kick
//message.guild.member(user).kick(); // kicks member
indexOfUser = arrayOfObjects.warns.indexOf(user_id);
//message.channel.sendMessage(indexOfUser);
message.channel.sendMessage("Before splicing" + arrayOfObjects.warns);
//arrayOfObjects.warns.splice(indexOfUser, 1); // remove the user from warns array
message.channel.sendMessage("After splicing" + arrayOfObjects.warns);
return;
};
声明 :indexOf(value)如果在数组中找不到该项目,则返回-1。 否则,它将返回项目所在的索引。 因此,您无需在数组中进行迭代。
与findIndex()
使用findIndex()时,您无需定义要在数组中查找的值。 您定义将在每次迭代中执行的函数。
您可以执行以下操作:
function iswarned (elem) {
return elem.user_id == user_id;
}
if (arrayOfObjects.warns.findIndex(iswarned) > -1) {
indexOfUser = arrayOfObjects.warns.findIndex(iswarned);
}
声明: findIndex()返回哪个回调函数返回真实值或-1的第一个索引,如果回调从不返回真实值或array.length为0。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.