#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