Как выбрать случайный объект (?) Из файла JSON с помощью Javascript?

В моем Discord Bot, который я создаю, ему нужно выбрать случайный объект из файла JSON. Мой текущий код таков:

    function spawn(){
        if (randomNum === 24) return
        const name = names.randomNum
        const embed = new Discord.RichEmbed()
        .setTitle(`${name} has been found!`)
        .setColor(0x00AE86)
        .setThumbnail(`attachment://./sprites/${randomNum}.png`)
        .setTimestamp()
        .addField("Quick! Capture it with `>capture`!")
        msg.channel.send({embed});
    }

Файл JSON выглядит так:

{
    "311": "Blargon",
    "310": "Xryzoz",
    "303": "Noot",
    "279": "",
    "312": "Arragn",
    "35": "Qeud",
    ...
}

Я хочу, чтобы он случайным образом выбрал один из них, например 303, и разместил его в богатой вставке. Что мне делать отсюда?

Обратите внимание, что 303 - это свойство объекта, а не реальный объект.

connexo 06.04.2018 05:38
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
1
10 579
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

const jsonData = {
    "311": "Blargon",
    "310": "Xryzoz",
    "303": "Noot",
    "279": "",
    "312": "Arragn",
    "35": "Qeud",
}
const values = Object.values(jsonData)

const randomValue = values[parseInt(Math.random() * values.length)]

console.info(randomValue)
Ответ принят как подходящий

Вы можете выбрать случайное имя, например:

// Create array of object keys, ["311", "310", ...]
const keys = Object.keys(names)

// Generate random index based on number of keys
const randIndex = Math.floor(Math.random() * keys.length)

// Select a key from the array of keys using the random index
const randKey = keys[randIndex]

// Use the key to get the corresponding name from the "names" object
const name = names[randKey]

// ...

Это можно сделать в два этапа.

Загрузка файла Json с использованием Javascript и локального сервера

1> Создайте файл Json, назовите его botNames.json, добавьте свои данные.

Примечание. Файлы .json могут содержать только литералы Json Object, Array или Json.

{
    "311": "Blargon",
    "310": "Xryzoz",
    "303": "Noot",
    "279": "",
    "312": "Arragn",
    "35": "Qeud"
}

Используйте XMLHttpRequest () для загрузки данных, вы можете использовать функцию ниже для загрузки файла .json, передавая функцию обратного вызова и путь в качестве аргумента.

function loadJSON(callback,url) {   
  var xobj = new XMLHttpRequest();
  xobj.overrideMimeType("application/json");
  xobj.open('GET', url, true); 
  xobj.onreadystatechange = function () {
        if (xobj.readyState == 4 && xobj.status == "200") {
          callback(xobj.responseText);
        }
  };
  xobj.send(null);
}

Чтобы сгенерировать случайный индекс, вы можете использовать приведенное ниже выражение

Math.floor (lowerLimt + (upperLimit - lowerLimit + 1) * Math.Random ())

это даст вам значения в диапазоне [lowerLimit, upperLimit)

Примечание: Это возможно, потому что Math.random () генерирует дробное число в диапазоне [0,1)

Ваша функция Перезвоните будет

function callback1(response){
        var botNames = JSON.parse(response)
        var keys = Object.keys(botNames);
        var randomProperty = keys[Math.floor(keys.length*Math.random())]
        var botName = botNames[randomProperty]
        console.info(botName);
    }

Вы можете использовать приведенные выше концепции в своем коде как

function loadJSON(callback,url) {   
    var xobj = new XMLHttpRequest();
    xobj.overrideMimeType("application/json");
    xobj.open('GET', url, true); 
    xobj.onreadystatechange = function () {
            if (xobj.readyState == 4 && xobj.status == "200") {
            // sending the resonse to your callback
            callback(xobj.responseText);
            }
    };
    xobj.send(null);
}

function spawn(){
        loadJSON(function(response){
          //This is your callback function

          var names = JSON.parse(response)
          var keys = Object.keys(botNames);
          var randomNum = keys[Math.floor(keys.length*Math.random())]
            
          if (randomNum === 24) return
          const name = names[randomNum]
          const embed = new Discord.RichEmbed()
          .setTitle(`${name} has been found!`)
          .setColor(0x00AE86)
          .setThumbnail(`attachment://./sprites/${randomNum}.png`)
          .setTimestamp()
          .addField("Quick! Capture it with `>capture`!")
          msg.channel.send({embed});
        },'/PATH_TO_YOUR_JSON/botNames.json')
    }

Я пробовал то, что вы там делали, и получил эту ошибку: TypeError: xobj.overrideMimeType is not a function

jackmerrill 07.04.2018 00:14

У меня это работает, я пробовал с серверами python и nodeJs, в Chrome, IE. Можете ли вы указать, какие версии сервера, браузера и программного обеспечения вы используете? Получил сообщение о подобной проблеме, вчера отправил stackoverflow.com/questions/49675273/…

Rohit Nandi 07.04.2018 07:11

Информация В Интернете: При использовании IE он поддерживается только в IE11 и более поздних версиях. Вы можете опустить эту строку, она все равно будет работать, с сервером по умолчанию, предоставленным типом MIME, например. 'текст / простой'

Rohit Nandi 07.04.2018 07:23

Еще одна альтернатива, которую вы можете защитить, используя если (xobj.overrideMimeType) {xobj.overrideMimeType ('приложение / json'); }

Rohit Nandi 07.04.2018 07:31

Другие вопросы по теме