Вход

Просмотр полной версии : Ассоциативный массив


simple
05.05.2011, 19:04
Здрасте, у меня вопрос. Создаю массив чисел:

var multi=new Array();
multi['0']=[130,40,8];
multi['20']=[125,30,5];
alert(multi.length); // выдает 21
alert(multi);// выдает 130,40,80,125,30,5,,,,,,,,,,,,,,,,кучу запятых

Это что значит если индексы в ключах идут не по порядку то память все равно они занимают? и как тогда узнать истинную длину массива?:blink:

Sweet
05.05.2011, 19:13
Это что значит если индексы в ключах идут не по порядку то память все равно они занимают?
Нет, не занимают.и как тогда узнать истинную длину массива?
В свойстве length находится воистину истинная длина.

simple
05.05.2011, 19:17
В свойстве length находится воистину истинная длина.
Ну так у меня всего лишь 2 массива ведь, multi[0] и multi[20] должно по идеи казать 2 или 1 если с 0 считать а кажет 21 :blink:

melky
05.05.2011, 19:18
Господи Иисусе.

вот так



function get_TRUTH ( array ){

for( var i = 0, TRUTH = 0; i < array.length ; i++ ){

if( typeof array[ i ] === "undefined" ) continue;

TRUTH++;

}

return TRUTH;

}



var t = [1,2,3];

t.length = 333;

alert ( get_TRUTH( t ) )

simple
05.05.2011, 19:24
Спасиб, а как убрать запятые которые в алерте добавляются?

melky
05.05.2011, 19:25
убрать элементы , значение которых не установлено или их длина равна нулю О_о

simple
05.05.2011, 19:27
а почему тогда если они равны нулю и их нет почему тогда запятые рисуются как будто это пустые элементы?

melky
05.05.2011, 19:38
запятые рисуются как будто это пустые элементы

сам ответил на свой вопрос :)


почему равны нулю?

если они равны нулю,тогда все ок

я про длину сказал




var a = [ "",0,false,null,undefined ]

alert( "длина массива - "+ a.length + "\nСам массив :\n"+a+"\n Длина последнего : "+a[ 0 ].length )

simple
05.05.2011, 19:49
Спасиб, а вот еще глупый вопрос. А как получить сами ключи этого массива?

for(a in multi){
alert(a); // выдает 0,1
alert(multi[a]); // выдает 130,40,80,125,30,5
}

А как получить сами индексы т.е 0 и 20

simple
05.05.2011, 20:06
хм..когда вместо цифр в ключами делаешь буквы то все работает, а почему с цифрами так происходит?

melky
05.05.2011, 20:10
потому что for .. in необходим для перебора свойств хеша ( объекта )

для массива используй while () {} или for( ){}

x-yuri
09.05.2011, 04:44
Ну так у меня всего лишь 2 массива ведь, multi[0] и multi[20] должно по идеи казать 2 или 1 если с 0 считать а кажет 21
если нужен массив с числовыми индексами, незачем в нем оставлять промежутки. Если нужны промежутки - используй ассоциативные массивы объекты (var multi = {'first': [130,40,8], 'second': [125,30,5]}; )