Как я могу проверить, есть ли имя в этом списке? - PullRequest
0 голосов
/ 04 августа 2020

Все это запускается с помощью:

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

У меня есть файл .txt для хранения всего с помощью FileSystem:

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.

Ответы [ 2 ]

0 голосов
/ 04 августа 2020

Эта функция может решить вашу проблему.

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. Они будут в форме (как вы описали) '1,user1\n5,user2\n2,user3'. А checkingName - это имя, которое вы хотите найти. Это будет что-то вроде 'user4'

В этой реализации индекс любого имени в массиве names будет индексом оценки, связанной с этим именем в массиве scores.

0 голосов
/ 04 августа 2020

Я не совсем понимаю, что вы хотите, но вы можете попробовать следующие шаги:

1: вы можете использовать метод find (), чтобы получить имя, которое вы ищете, и сохранить его в переменной.

2: используйте метод фильтрации, чтобы сохранить остальное в новой переменной

3: затем используйте метод concat, чтобы добавить либо новую переменную, которую вы нашли на шаге 1, либо просто добавьте 1, если имя уже существует.

Например: const changes = 1? 2.concat (1): 2.filter (exist => exist.votes + = 1)

...