Вопрос по arrays, javascript – Длина ассоциативного массива JavaScript

48

У меня есть ассоциативный массив JS(or some may prefer to call it as an object) как сказать

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

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

Please dont suggest iterating over the entire array/object as mentioned in этот вопроспотому что массив / объект, который у меня есть, очень большой.

Есть ли способ, которым я мог бы продолжить это?

Я бы предложил вам перебрать весь объект, так как это единственный способ добиться этого. То, что у вас есть, это объект (который был массивом до второй строки). У объекта нет длины, у массива есть. Fabien Ménager

Ваш Ответ

4   ответа
1

отслеживая длину массива с помощью ассоциативного элемента, называемого length.

Ака:

myArray["length"]=0;

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

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

theLength=myArray.length;
В случае ОП их массив является фактическим, а не простым объектом, поэтому он уже имеет.length свойство. Так что, если им доводилось выполнять какие-либо «правильные» операции с массивами (например,.push()) это изменило бы длину ... nnnnnn
7

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

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
96

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

Самое близкое, что я могу вспомнить, - это ES5 и выше,Object.keys ( Спецификации | MDN), который вы можете использовать следующим образом:

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

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

Есть еще одна особенность ES5 +,Object.getOwnPropertyNames ( Спецификации | 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?"
};
@ gopi1410: Кстати, каждый раз, когда ты пишешьnew Array(), вы можете использовать[] вместо.[] создает новый пустой массив, как{} создает новый пустой объект. T.J. Crowder
ok, это новая информация для меня. И также я вижу, что нет способа узнать длину объекта без итерации по нему. В любом случае спасибо. :) gopi1410
1

Похожие вопросы