Использовать строку для чтения переменной файла конфигурации

У меня есть файл конфигурации (leaderboard.json), который выглядит следующим образом:

{
    "usercount<@386679122614681600>": 0
}

Я пытаюсь прочитать значение этой переменной (так было бы 0) в моем файле index.js, который выглядит следующим образом:

var LEADERBOARD = require('./leaderboard.json');
const usercount = 'usercount'+user
var countvalue = LEADERBOARD.usercount
console.log(countvalue)

По сути, я хочу, чтобы countvalue возвращала 0, но я не могу просто использовать LEADERBOARD.usercount<@ 386679122614681600>, так как это имя будет меняться.

По сути, мне интересно, есть ли обходной путь, где я могу прочитать переменную моего файла конфигурации, используя строку, которую я создаю.

4 ответа

Решение

Для этого вам нужно использовать скобочные обозначения.

var countvalue = LEADERBOARD[usercount]

Вот пример:

const foo = {
  bar123: 'baz'
}

const prop = 'bar' + 123
console.log(foo[prop])

Этот ответ поможет вам, если вы знаете, что у вас есть доступ только к первому элементу! Больше информации об этом нет, поэтому я предполагаю, что это потенциальный ответ:

Вы можете использовать Object.keys, чтобы поместить значение в формат массива, а затем получить доступ к первому значению с помощью [0], и оно вернет значение 0.

var obj = {
    "usercount<@386679122614681600>": 0
}

var countvalue = obj[Object.keys(obj)[0]];

console.log(countvalue)

Я действительно надеюсь, что это поможет. Пожалуйста, дайте мне знать, если это не было вашим требованием.

Использование [] нотации.

потому что для . свойство нотации должно быть действительным идентификатором JS.

Свойство должно быть допустимым идентификатором JavaScript, т. е. последовательностью буквенно-цифровых символов, включая знак подчеркивания ("_") и знак доллара ("$"), которые не могут начинаться с цифры. Например, object.$1 допустим, а object.1 - нет.

let obj = {
    "usercount<@386679122614681600>": 0
}

const count = `386679122614681600`;
const useCount = `usercount<@${count}>`;

console.log(obj[useCount])

Используя созданную вами строку, вы можете вернуть значение учетной записи пользователя.

const LEADERBOARD = {
    "usercount<@386679122614681600>": 0
}

// String you create
const userId = '386679122614681600'
const userCount = `usercount<@${userId}>`

console.log(LEADERBOARD[userCount]) // 0
Другие вопросы по тегам