Длина ассоциативного массива javascript
У меня есть ассоциативный массив js (или некоторые могут предпочесть называть его объектом) как, скажем
var quesArr=new Array();
quesArr["q101"]="Your name?";
quesArr["q102"]="Your age?";
quesArr["q103"]="Your school?";
есть ли встроенная функция, которая может получить длину этого массива, или любое решение в jQuery или другой библиотеки? В настоящее время quesArr.длина даст 0, как большинство из вас должно знать.
пожалуйста, не предлагайте итерацию по всему массиву / объекту, как указано в этот вопрос, потому что массив/объект, который у меня есть очень крупный.
есть ли способ я могу продолжить?
4 ответов
нет, нет встроенного свойства, которое говорит вам, сколько свойств имеет объект (что вы ищете).
ближе всего я могу думать-это в ES5 выше функции Object.keys
(spec | MDN), который вы могли бы использовать следующим образом:
console.log(Object.keys(quesArr).length); // "3"
Object.keys
возвращает массив имен собственных перечисляемых свойств объекта. Но внутренне, конечно, это тот цикл, который вы не хотели использовать (и polyfill для него для среды pre-ES5 используют цикл, конечно).
есть еще одна функция ES5+,Object.getOwnPropertyNames
( spec | MDN), который возвращает массив "собственных" имен свойств объекта независимо от того, являются ли они перечислимыми.
оба поддерживается в чем-либо смутно современном. IE9+ и версии Chrome, Firefox и Safari, по крайней мере, с 2011 года.
FWIW, если вы не собираетесь использовать Array
функции не превращайте объект в массив. Вместо этого:
var quesArr={};
quesArr["q101"]="Your name?";
quesArr["q102"]="Your age?";
quesArr["q103"]="Your school?";
эти ключи не должны быть заданы как строковые литералы в квадратных скобках, либо, если вы не хотите, чтобы они были (будь то использование массива или простого объекта):
var quesArr={};
quesArr.q101="Your name?";
quesArr.q102="Your age?";
quesArr.q103="Your school?";
но вы можете использовать другую нотацию, если хотите; они точно эквивалентны, за исключением того, что с пунктирной нотацией ключи должны быть действительными идентификаторами (в скобках они могут быть чем угодно).
вы даже можете сделать это:
var quesArr={
q101: "Your name?",
q102: "Your age?",
q103: "Your school?"
};
или (если ключи не будут действительными идентификаторами):
var quesArr={
"q101": "Your name?",
"q102": "Your age?",
"q103": "Your school?"
};
Предположим, у вас есть следующее,
var myObject = {}; // denotes an Object is being created
myObject.city = "Chennai";
myObject.state = "Tamilnadu";
myObject.country = "Indian Peninsula";
console.log(myObject.length); // results in undefined
но есть способ рассчитать длину в современных браузерах.(Chrome, FF4+, IE9)
Object.keys(myObject);
// --> ["city", "state", "country"]
Object.keys(myObject).length
// --> 3
можно также решить проблему длины ассоциативных массивов, отслеживая длину массива с ассоциативным элементом length.
ака:
myArray["length"]=0;
как вы добавляете или удаляете элементы просто добавить или вычесть из myArrary["length"]
элемент.
затем вы можете делать такие вещи, как:
theLength=myArray.length;
ассоциативный массив не имеет свойства length вы можете получить длина