Как узнать длину ассоциативного массива?
Пример массива:
var arr={test:'дом',test1:{test:'дача',test1:'домик',0:'Хижина'}}; //Почему тут я могу обращаться через точки к текстовым ключам, alert(arr.test1.test1); //домик //а к числовому приводит к какой-то ошибке и соответсвенно вообще ничего не работает alert(arr.test1.0); //Syntax error at line 43 while loading: expected ')', got '.0' alert(arr.test1.0)); //И как узнать длину массива? alert(arr.test1.length); //undefined Был бы не ассоциативный массив то легко бы посчитал а в данном случае как? |
к числовому нужно обращатся так:
alert(arr.test1[0]);посчитать количество можно так: alert( Object.keys( arr.test1 ).length ); |
В javascript нету ассоциативных массивов,которые есть в PHP.
у вас объект. alert(arr.test1.test1);//здесь все норм,вы получили доступ к свойству объекта alert(arr.test1[0]);//так должно сработать. У объекта так длина не определяется.Как альтернатива можно пробежатся for ...in по объекту и определить количество . |
Ошибка=(
Цитата:
|
|
FINoM,
Моя ошибка, Object с маленькой написал -в этом и ошибка,xD. |
ну как минимум IE8< данный метод не поддерживает...
|
lord2kim,
для IE думаю вариантов других нет, кроме как перебор? |
vitorrio, может и есть, но таковых не знаю(((
|
Ну по идее число ключей и значений мон узнать (если все ключи со значениями - занчит удвоенное значение кол-во ключей
<script type="text/javascript"> var arr={test:'дом',test1:{test:'дача',test1:'домик',0:'Хижина'}}; alert(arr.test1['test1']); alert(arr.test1[0].length); </script> |
Цитата:
if (!Object.keys) { Object.keys = (function () { var hasOwnProperty = Object.prototype.hasOwnProperty, hasDontEnumBug = !({toString: null}).propertyIsEnumerable('toString'), dontEnums = [ 'toString', 'toLocaleString', 'valueOf', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'constructor' ], dontEnumsLength = dontEnums.length return function (obj) { if (typeof obj !== 'object' && typeof obj !== 'function' || obj === null) throw new TypeError('Object.keys called on non-object') var result = [] for (var prop in obj) { if (hasOwnProperty.call(obj, prop)) result.push(prop) } if (hasDontEnumBug) { for (var i=0; i < dontEnumsLength; i++) { if (hasOwnProperty.call(obj, dontEnums[i])) result.push(dontEnums[i]) } } return result } })() };взято от сюда: https://developer.mozilla.org/en-US/...ts/Object/keys |
//Для начала создадим счетчик:
var cnt = 0; for(var p in obj) cnt++; console.log(cnt); |
Часовой пояс GMT +3, время: 23:59. |