Как я могу сделать это там, где, если у вас несколько предметов, они отображаются как «Удочка (x3)»? [Команда инвентаризации]

#discord.js #inventory #quick.db

Вопрос:

Один вопрос, как я могу сделать это там, где, если у вас несколько предметов, он отображается как «Удочка (3)»? << измените значение 3 на количество предметов

Так как Discord вернется с ошибкой, если встраивание превысит максимальный размер. Спасибо!

Инвентарный код:

 const db = require('quick.db');
const Discord = require('discord.js');

module.exports = {
    name: "inventory",
    description: "View your inventory",


    async run (client, message, args) {
        let items = await db.fetch(message.author.id);
        if(items === null) items = "Nothing"

        const Embed = new Discord.MessageEmbed()
        .addField('Inventory', items)

        message.channel.send(Embed);
    }
}
 

TL;DR Как удалить дубликаты элементов и указать количество элементов рядом с элементом.

Комментарии:

1. Нам нужен ваш код для создания, добавления и удаления из инвентаря. В противном случае помочь станет очень трудно

Ответ №1:

В основном вам нужно преобразовать структуру данных элементов в какую-либо другую структуру данных, организованную по типу элемента. Но мы не знаем, что такое, черт возьми, «предметы». Вот лишь один возможный пример. Предполагая, что ваш инвентарь представляет собой массив объектов, вы могли бы сделать что-то вроде:

 var items = [{name:'fishing pole'}, {name:'sword'}, {name:'fishing pole'}, {name:'fish'}, {name:'fish'}, {name:'fishing pole'}];
console.log('Disorganized:', items);

var inventoryMap = new Map();

items.forEach(function(item, index, array) {
  var itemArray = inventoryMap.get(item.name);
  if (itemArray) {
    itemArray.push(item);
  } else {
    inventoryMap.set(item.name, [item]);
  }
});

console.log('Sorted:');

inventoryMap.forEach( function(value, key) {
  console.log(key, '(' value.length ')');
});