Загружаю объект map из json файла, но найти его размер не получается, выводит undefined
Загружаю json файл и записываю в объект Map. Потом хочу узнать размер объекта(то есть сколько там таймеров), но консоль выводит undefined.
Подскажите, пожалуйста, что я делаю не так.
вот код команда:
const Discord = module.require("discord.js");
const fs = require("fs");
let timer = new Map();
timer = require('../jsons/timer.json');
module.exports.run = async (bot, message, args) => {
if (args[0] == 'amount') {
let gld = message.member.guild.id;
console.log(`На сервере ${timer[gld].length} таймеров.`);
}
};
module.exports.help = {
name: "timer"
};
вот json файл:
{
"guild_id": {
"1": {
"time": 1000,
"iteration": true,
"author_nick": "nick",
"author_id": "id"
},
"2": {
"time": 10000,
"iteration": true,
"author_nick": "nick",
"author_id": "id"
}
}
}
на месте guild_id стоит настоящий айди гильдии в дискорде.
Изменение в коде:
const Discord = module.require("discord.js");
const fs = require("fs");
let timer = new Map(
Object.entries(
require('../jsons/timer.json')
)
);
module.exports.run = async (bot, message, args) => {
if (args[0] == 'amount') {
let gld = String(message.member.guild.id);
console.log(`На сервере ${timer["guild_id"].size} таймеров.`);
}
};
module.exports.help = {
name: "timer"
};
Ответы (1 шт):
Это так не работает:
let timer = new Map();
timer = require('../jsons/timer.json');
Результат, который возвращает require просто заменяет значение new Map(), таким образом, в переменной будет простой объект, а не Map.
Кроме того, у Map нет свойства length, есть свойство size
Чтобы на основе объекта сформировать Map, можно воспользоваться тем, что конструктор Map может принимать итерируемый объект.
Объект каждый элемент должен иметь вид: [key, value]
Для получения такого объекта можно воспользоваться методом Object.entries
В итоге код может выглядеть так:
let timer = new Map(
Object.entries(
require('../jsons/timer.json')
)
);
Для получения значения по ключу, в Map используется метод get
Таким образом код должен получения такой
timer.get("guild_id")
Чтобы узнать количество свойств в объекте, нужно посмотреть количество ключей/значений либо просто в цикле посчитать.
метод Object.keys вернет массив ключей. Достаточно будет взять у него length
let timer = require('../jsons/timer.json');
...
console.log(`На сервере ${Object.keys(timer[gld]).length} таймеров.`);