Как узнать длину ассоциативного массива?
Пример массива:
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, время: 01:23. |