Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Почему массив растет? (https://javascript.ru/forum/project/13892-pochemu-massiv-rastet.html)

sdiemen 19.12.2010 01:49

Почему массив растет?
 
<html>
	<head>
        <script language="javascript">

function randomArray(){
	var a=new Array(0,1,2,3,4,5,6,7,8,9);
	for(i=0;i<a.length;i++){
		var indexA=Math.floor(Math.random()*(a.length+1));
		var indexB=Math.floor(Math.random()*(a.length+1));
		var bufA=a[indexA];
		var bufB=a[indexB];
		a[indexA]=bufB;
		a[indexB]=bufA;
	}
	alert(a+"="+a.length);
	/*a.shuffle();
	alert(a);*/
}

/*Array.prototype.shuffle = function( b ){
	var i = this.length, j, t;
	while( i ){
		j = Math.floor( ( i-- ) * Math.random() );
		t = b && typeof this[i].shuffle!=='undefined' ? this[i].shuffle() : this[i];
		this[i] = this[j];
		this[j] = t;
	}
	return this;
	};
*/

</script>
	</head>
	<body onload="randomArray()">
	</body>
</html>

Задача заключается в перемешивании массива.
Почему в массиве появляются элементы со значениями undefined? Почему массив увеличивается в размерах?Где найти информацию по этой теме?

Gvozd 19.12.2010 05:08

var a=new Array(0,1,2,3,4,5,6,7,8,9);
  var indexA=Math.floor(0.9999*(a.length+1));
alert(indexA);
alert(a[indexA]);
alert(a[indexA-1]);

x-yuri 19.12.2010 05:18

http://javascript.ru/ecma/part15#a-15.8.2.14

Kolyaj 19.12.2010 08:16

Цитата:

Сообщение от sdiemen
a.length+1

Вот из-за этого числа.

http://alljs.ru/articles/array/sort.html#shuffle

sdiemen 19.12.2010 12:16

Девять часов сна и все тайное становится явным. Вчера неоднократно, во время отладки, наталкивался на то что запись происходит в элемент находящийся за диапазоном объявленного массива но так и не смог осознать это. Очередной раз убеждаюсь в необходимости соблюдения режима труда и отдыха. Спасибо Gvozd,x-yuri,Kolyaj, за предоставление исчерпывающего ответа.


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