繁体   English   中英

Javascript-JSON文件返回[object Object]

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM