#javascript #jquery
#javascript #jquery
Вопрос:
Что я пытаюсь сделать, так это показать случайное имя, я уже получил его, но я хочу показать 3 случайных имени из объекта, а также уникальные, я имею в виду, не показывать дубликаты. как я могу это сделать?
var items = [{name: 'Tom', phone: '12321'}, {name: 'Jerry', phone: '235677'}, {name: 'Mike', phone: '11209765'}, {name: 'Robert', phone: '5345'}, {name: 'Danny', phone: '1247774'}, {name: 'Josef', phone: '1199900'}, {name: 'Rainbow', phone: '12675'}, {name: 'Avi', phone: '12344'}, {name: 'Shani', phone: '12222767'}];
var item1 = items[Math.floor(Math.random() * items.length)];
var item2 = items[Math.floor(Math.random() * items.length)];
var item3 = items[Math.floor(Math.random() * items.length)];
$('#Name-1').text('Name 1: ' item1.name);
$('#Name-2').text('Name 2: ' item2.name);
$('#Name-3').text('Name 3: ' item3.name);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="Name-1"></div>
<div id="Name-2"></div>
<div id="Name-3"></div>
Это работает, но иногда показывает дубликаты, например:
Name 1: Danny
Name 2: Mike
Name 3: Mike
Комментарии:
1. Зачем закрывать мой вопрос?? это не мой ответ!
2. Почему … потому что уже есть много похожих вопросов. Разве ссылка выше не делает то, что вам нужно?
3. @charlietfl нет, я не спрашивал, как создать случайный массив! Я спросил, как показать 3 уникальных! случайный массив из объекта
4. Первый ответ подсказывает вам очень правильный подход и объясняет как «Вы могли бы перетасовать массив и выбрать первые четыре». которых в вашем случае было бы только три. Как это не решает вашу проблему? Немного поискав самостоятельно, вы могли бы найти и другие подходы
5. Я согласен с @charlietfl, вопрос следует закрыть как дублирующий, поскольку в нем никогда ничего не упоминается о сохранении значения и никогда не показывать их снова, если они были просмотрены один раз. Оператору необходимо добавить спецификацию требований , чтобы вопрос НЕ был закрыт как дубликат в первую очередь!
Ответ №1:
Это сработает в вашем случае. Удаление выбранного элемента из массива. Это всегда будет давать вам уникальные значения.
var items = [{
name: 'Tom',
phone: '12321'
}, {
name: 'Jerry',
phone: '235677'
}, {
name: 'Mike',
phone: '11209765'
}, {
name: 'Robert',
phone: '5345'
}, {
name: 'Danny',
phone: '1247774'
}, {
name: 'Josef',
phone: '1199900'
}, {
name: 'Rainbow',
phone: '12675'
}, {
name: 'Avi',
phone: '12344'
}, {
name: 'Shani',
phone: '12222767'
}];
function getRandom(items) {
let names = [];
let first = Math.floor(Math.random() * items.length);
names.push(items[first].name);
items.splice(first, 1);
let second = Math.floor(Math.random() * items.length);
names.push(items[second].name);
items.splice(second, 1);
let third = Math.floor(Math.random() * items.length);
names.push(items[third].name);
return names;
}
console.log(getRandom([...items]));
Комментарии:
1. Использование
3
для вычисления индекса означает, что вы никогда не увидите ни одного из элементов после первых 5 или 6 в массиве. Вычисления должны основываться на общей длине. Также можно было бы преобразовать этот код в простой цикл без всех повторений