如何检查名称是否已在此列表中?

How can I check if a name is already in this list?

所有这些都是通过以下方式触发的:

if (message.content.toLowerCase().startsWith('test')) {

我有一个 .txt 文件来存储文件系统的所有内容:

leaderboard = (fs.readFileSync('leaderboard.txt', 'utf-8'))

我需要帮助检查某个名称是否已在该列表中。因此,如果某人的名字未包含在该列表中,则应将他添加到底部,得分为 1 1,exampleUser如果用户已包含在该列表中,则应增加和更新他的分数 2,exampleUser

然后 .txt 应该更新为:

fs.writeFileSync('leaderboard.txt', leaderboard, 'utf8')

我正在尝试像这样存储所有使用“测试”的用户:

1,exampleUser1
54,exampleUser2
34,exampleUser3
4,exampleUser4
65,exampleUser5
56,exampleUser6

如果一个不在列表中的新用户说“测试”,他应该被添加到底部,因为他说了一次“测试”,得分为 1。每当有人说“测试”时,他们的分数应该增加,或者如果他们不在列表中,他们应该加上 1 分。

我正在使用 V11。

我没有完全得到你想要的,但你可以尝试以下步骤:

1:你可以使用find()方法获取你要找的名字,并把它存储在一个变量中。

2:使用filter方法将剩下的存入一个新的变量

3: 然后使用 concat 方法添加您在步骤 1 中找到的新变量,或者如果名称已经存在则只添加一个 1。

例如: const 变化 = 1 ? 2.concat(1) : 2.filter(存在=> exist.votes += 1)

这个功能或许可以解决您的问题

function updateNameAndScore(fileData, checkingName) {
    let data = fileData.split('\n');
    let names = [];
    let scores = [];
    let leaderboard = "";
    data.forEach(d => {
        let values = d.split(",");
        names.push(values[1])
        scores.push(Number(values[0]))
    });

    if (names.includes(checkingName))
        scores[names.indexOf(checkingName)]++;
    else {
        names.push(checkingName);
        scores.push(1)
    }
    
    leaderboard += (scores[0] + ',' + names[0]);
    
    for(let i = 1; i < scores.length; i++)
        leaderboard += ('\n' + scores[i] + ',' + names[i])
    
    return leaderboard;
    
}

fileData 是使用 fs 读取的数据 module.It 将采用 '1,user1\n5,user2\n2,user3' 的形式(如您所述)。 而 checkingName 是您要搜索的名称。它将类似于 'user4'

在此实现中,names 数组中任何名称的索引将是 scores 数组中与该名称关联的分数的索引。