Длина ассоциативного массива 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 вы можете получить длина