Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Массив случайных чисел (https://javascript.ru/forum/misc/22439-massiv-sluchajjnykh-chisel.html)

e-do 19.10.2011 18:23

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

написал вот такое

var uCatsOut=[
['7','1','0'],
['8','1','2'],
['10','1','0'],
['11','1','0'],
['12','1','1'],
['13','1','0'],
['22','1','0']
];

function getRandomInt(min, max)
{
	var randNum;
	randNum = Math.floor(Math.random() * (max - min + 1)) + min;
	return randNum;
}

function randomIdsOfCat(catslength){
	var num;
	var randNumOld = [];
	for(i=0; i<catslength; i++){
		num = getRandomInt(0, uCatsOut.length-1);
		if(randNumOld.length > 0){
			for(k = 0; k < randNumOld.length; k++){
				if(num == randNumOld[k]){
					k=0;
					num = getRandomInt(0, uCatsOut.length-1);
				}
			}	
		}
		randNumOld[i] = num;
	}
	return randNumOld;
}

 var s = randomIdsOfCat(6);

alert (s);


что то не всегда получается, как будто недопроверяет последний элемент массива, потому что повторения попадают в конец. Не могу домучать, может подскажете?

walik 19.10.2011 19:48

function randomIdsOfCat(catslength){
  var arr = [];
  for(i = 0;i<catslength;i++) {
    while(arr.indexOf(r = getRandomInt(0, uCatsOut.length)) != -1);
    arr.push(r);
  }
  return arr;
}

monolithed 19.10.2011 20:47

var shiffle = function (array, max) {
    var i = array.length;

    while(i--)
        array[i] == array[i-1] && array.splice(i, 1);

    return array.sort(function() {
        return .5 - Math.random();
    }).splice(0, max);
};

alert(shiffle([1, 1, 1, 2, 2, 4, 3, 3, 3, 5, 5, 5, 7, 8, 9], 5));

e-do 19.10.2011 21:15

:) спасибо, долго бы я мучался)) недавно программирование учу, прямолинейно рассуждаю

dmitriymar 19.10.2011 21:58

Цитата:

Сообщение от e-do
прямолинейно рассуждаю

удивил:D интересно что б былобы если бы кодеры не прямолинейно рассуждали?

e-do 23.11.2011 03:34

Цитата:

Сообщение от dmitriymar (Сообщение 131883)
удивил:D интересно что б былобы если бы кодеры не прямолинейно рассуждали?

может у кодеру надо, хотя не вполне уверен, но программисту логика нужна, и не всегда кратчайший путь в логике лежит прямо из одной точки в другую, как в геометрии например.

trikadin 23.11.2011 07:31

Цитата:

Сообщение от e-do
может у кодеру надо, хотя не вполне уверен, но программисту логика нужна

Кодер == программист)

Цитата:

Сообщение от e-do
и не всегда кратчайший путь в логике лежит прямо из одной точки в другую, как в геометрии например.

А в геометрии прям ни разу думать не нужно) Ни тебе теорем, ни поиска решения...

e-do 28.11.2011 03:59

Цитата:

Сообщение от trikadin (Сообщение 138489)
Кодер == программист)

А в геометрии прям ни разу думать не нужно) Ни тебе теорем, ни поиска решения...


я бы сказал, что кодер !== программист :) это более правдоподобно. Логика программиста не всегда доступна кодеру.
А насчет геометрии - я не говорил, что думать не нужно. Просто дело в том, что от количества думалки все равно кратчайший путь от точки до точки останется единственно неизменным в геометрии ))(о чем я писал в прежнем топике).

trikadin 28.11.2011 22:16

Цитата:

Сообщение от e-do
я бы сказал, что кодер !== программист это более правдоподобно. Логика программиста не всегда доступна кодеру.

Программист - это тот, кто пишет код. Кодер - это тот, кто пишет код. Разницы нет) Ты таки что-тот путаешь.

Aetae 28.11.2011 22:35

Программист - это тот, кто программирует. Кодер - это тот, кто пишет код.
Для первого, в отличие от второго, написание кода - лишь один из этапов деятельности.


Часовой пояс GMT +3, время: 02:16.