Получить случайное сообщение от json с помощью js

#javascript #json

Вопрос:

У меня проблема с получением случайных сообщений от json в моем файле js.

 const values = Object.values(jsonData) 
/*const randomValue = values[Math.floor(Math.random() * values.length)]*/ 
const randomValue = jsonData.quotes[Math.floor(Math.random() * values.length)]; 
console.log(randomValue.quote);
 

Он дал мне первый предмет. Я хочу дать мне случайную, а не первую.

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

1. Пожалуйста, покажите значение jsonData .

2. Это связано с тем, что вы не передали аргументы в функции math.random() по умолчанию она вернет значение от 0 до 1.

3. @GulshanAggarwal Math.random является нулевой функцией, что означает, что она не получает никаких аргументов.

4. О да, извини! @YuriyYakym Я допустил ошибку, но по умолчанию она вернется между 0 и 1

5. @GulshanAggarwal да, но почему это проблема? Существует умножение и обычный способ получения случайного целого числа в диапазоне

Ответ №1:

Вы были очень близки к правильному решению. Если бы вы сделали это const values = jsonData.quotes , ваш код работал бы.

Проблема в том, что вы использовали values.length вместо jsonData.quotes.length случайного расчета индекса.

 const quotes = jsonData.quotes;
const randomIndex = Math.floor(Math.random() * quotes.length);
const randomQuote = quotes[randomIndex];

console.log(randomQuote);
 

пс. используйте более описательные имена переменных, и вам будет сложнее ввести ошибку. values слишком двусмысленное название.

Ответ №2:

Похоже, вы пытаетесь получить случайный элемент из quotes массива вашего объекта, но получаете только Object.values от jsonData . Вам нужно получить значения jsonData.quotes вместо этого.

 const jsonData = { quotes: [{ quote: 1 }, { quote: 2 }, { quote: 3 }] };

const values = Object.values(jsonData.quotes); 

const randomValue = jsonData.quotes[Math.floor(Math.random() * values.length)]; 

console.log(randomValue.quote); 

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

1. Спасибо, но у меня есть такая цитата и такой автор. «цитаты»: [ { «цитата»:»Жизнь-это не получение и обладание, это отдача и бытие».,»автор»:»Кевин Крузе»},

2. Это был пример. Мои данные в основном совпадают с вашими. Я просто возвращаю цифры.

Ответ №3:

Вам нужен основной массив внутри вашего JSON и сохраните в нем свои данные, например:

 var jsonContent = {
        "main": [
            {
                "id": "111",
                "title": "post title 111",
                "desc": "This is a test desc 111"
            },
            {
                "id": "222",
                "title": "post title 222",
                "desc": "This is a test desc 222"
            },
            {
                "id": "333",
                "title": "post title 333",
                "desc": "This is a test desc 333"
            }
        ]
    }

    var random = jsonContent.featured[Math.floor(Math.random() * jsonContent.main.length)];
    console.log(random)
 

Замените объекты JSON на:

 {
    "id": "333",
    "title": "post title 333",
    "desc": "This is a test desc 333"
}
 

Внутри "main"

Я надеюсь, что это вам поможет.

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

1. Это не решение, но оно мне очень помогает. Спасибо

Ответ №4:

Проблема Math.random() * jsonData.length в том . Решение очень простое, я не множественен со всеми значениями

 Math.random() * jsonData.quotes.length