Javascript.RU

PHP-функция: array_rand

Javascript:

function array_rand ( input, num_req ) {	// Pick one or more random entries out of an array
	// 
	// +   original by: _argos

	var Indexes = [];
	var Ticks = num_req || 1;
	var Check = {
		Duplicate	: function ( input, value ) {
			var Exist = false, Index = 0;
			while ( Index < input.length ) {
				if ( input [ Index ] === value ) {
					Exist = true;
					break;
				}
				Index++;
			}
			return Exist;
		}
	};

	if ( input instanceof Array && Ticks <= input.length ) {
		while ( true ) {
			var Rand = Math.floor ( ( Math.random ( ) * input.length ) );
			if ( Indexes.length === Ticks ) { break; }
			if ( !Check.Duplicate ( Indexes, Rand ) ) { Indexes.push ( Rand ); }
		}
	} else {
		Indexes = null;
	}

	return ( ( Ticks == 1 ) ? Indexes.join ( ) : Indexes );
}

Примеры:

array_rand( [1,2,3], 2 );
[2,1]


Автор: Владимир Безкостный (не зарегистрирован), дата: 12 июня, 2013 - 10:02
#permalink

ошибка в строке if ( !Check.Duplicate ( Indexes, Rand ) ) { Indexes.push ( Rand ); }

должно быть if ( !Check.Duplicate ( Indexes, Rand ) ) { Indexes.push ( input[Rand] ); }


Автор: WAIX (не зарегистрирован), дата: 22 апреля, 2021 - 22:09
#permalink

Сегодня 21 год, эти вещи делаются проще...

function array_rand(data, num){
	num = Math.min(num || 1, data.length);
	var rand = [];
	while(num--) {
		rand.push( data.splice(Math.floor(Math.random() * data.length) % data.length, 1)[0] );
	}
	return rand;
}

Автор: WAIX (не зарегистрирован), дата: 22 апреля, 2021 - 22:15
#permalink

А чтоб исходный массив не изменялся, добавьте вначале функции его клонирование

data = data.slice(0);

Автор: Гость (не зарегистрирован), дата: 15 апреля, 2022 - 23:52
#permalink

Автор: Гость (не зарегистрирован), дата: 16 апреля, 2022 - 13:44
#permalink

Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
1 + 9 =
Введите результат. Например, для 1+3, введите 4.
 
Поиск по сайту
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние комментарии
Последние темы на форуме
Forum