Подтвердить что ты не робот

Длина ассоциативного массива javascript

У меня есть ассоциативный массив js (или некоторые предпочитают называть его объектом), например

var quesArr=new Array();
quesArr["q101"]="Your name?";
quesArr["q102"]="Your age?";
quesArr["q103"]="Your school?";

Есть ли встроенная функция, которая могла бы получить длину этого массива или любое решение в jQuery или другой библиотеке? В настоящее время quesArr.length будет давать 0, так как большинство из вас должно знать.

Пожалуйста, не предлагайте повторить по всему массиву/объекту, как упоминалось в этот вопрос, потому что массив/объект, который у меня есть, очень большой.

Есть ли способ продолжить это?

4b9b3361

Ответ 1

Нет, нет встроенного свойства, которое сообщает вам, сколько свойств имеет объект (это то, что вы ищете).

Ближайшим, о котором я могу думать, является функция ES5 и выше, Object.keys, которую вы можете использовать следующим образом:

console.log(Object.keys(quesArr).length); // "3"

Object.keys возвращает массив имен собственных собственных свойств объекта. Но внутренне, конечно, это тот цикл, который вы не хотели использовать (и polyfill для него для сред предварительного ES5 использует цикл, конечно).

Там также есть еще одна функция ES5 +, Object.getOwnPropertyNames, которая возвращает массив имен собственных объектов, независимо от того, являются ли они перечислим.


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?"
};

Ответ 2

Предположим, что у вас есть следующее:

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

Ответ 3

Можно также рассмотреть вопрос о длине ассоциативных массивов, отслеживая длину массива с ассоциативным элементом, называемым длиной.

ака

myArray["length"]=0;

Когда вы добавляете или удаляете элементы, просто добавляйте или вычитайте из элемента myArrary["length"].

Затем вы можете делать такие вещи, как:

theLength=myArray.length;