web-dev-qa-db-fra.com

Longueur d'un tableau associatif javascript

J'ai un tableau associatif js (ou certains peuvent préférer l'appeler comme un objet) comme, disons

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

Existe-t-il une fonction intégrée qui pourrait obtenir la longueur de ce tableau, ou une solution dans jQuery ou une autre bibliothèque? Actuellement, quesArr.length donnerait 0, comme la plupart d'entre vous doivent le savoir.

Veuillez ne pas suggérer d'itérer sur l'ensemble du tableau/objet comme mentionné dans cette question , car le tableau/objet que j'ai est très grand.

Existe-t-il un moyen de procéder avec cela?

56
gopi1410

Non, aucune propriété intégrée ne vous indique le nombre de propriétés de l'objet (ce que vous recherchez).

Le plus proche auquel je peux penser est une fonctionnalité ES5 et supérieure, Object.keys ( spec | MDN ), que vous pouvez utiliser comme ceci:

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

Object.keys renvoie un tableau des noms des propriétés énumérables d'un objet. Mais en interne, bien sûr, c'est cette boucle que vous ne vouliez pas utiliser (et le polyfill pour les environnements pré-ES5 utilise une boucle, bien sûr).

Il existe également une autre fonctionnalité ES5 +, Object.getOwnPropertyNames ( spec | MDN ), qui retourne un tableau des noms de propriété "propres" de l'objet, qu'ils soient ou non énumérable.

Les deux sont pris en charge dans quelque chose de vaguement moderne . IE9 + et les versions de Chrome, Firefox et Safari depuis au moins 2011.


FWIW, à moins que vous n'utilisiez les fonctions Array de l'objet, n'en faites pas un tableau. Au lieu:

var quesArr={};
quesArr["q101"]="Your name?";
quesArr["q102"]="Your age?";
quesArr["q103"]="Your school?";

Ces clés ne doivent pas non plus être données sous forme de littéraux de chaîne entre crochets, si vous ne le souhaitez pas (que vous utilisiez un tableau ou un objet simple):

var quesArr={};
quesArr.q101="Your name?";
quesArr.q102="Your age?";
quesArr.q103="Your school?";

Mais vous pouvez utiliser l'autre notation si vous préférez; ils sont exactement équivalents, sauf qu'avec la notation en pointillés, les clés doivent être des identificateurs valides (en notation entre crochets, elles peuvent être n'importe quoi).

Vous pouvez même faire ceci:

var quesArr={
    q101: "Your name?",
    q102: "Your age?",
    q103: "Your school?"
};

ou (si les clés ne sont pas des identifiants valides):

var quesArr={
    "q101": "Your name?",
    "q102": "Your age?",
    "q103": "Your school?"
};
112
T.J. Crowder

Supposons que vous ayez les éléments suivants,

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  

Mais, il existe un moyen de calculer la longueur dans les navigateurs modernes. (Chrome, FF4 +, IE9)

Object.keys(myObject);  
// --> ["city", "state", "country"]
Object.keys(myObject).length
// --> 3
8
kmario23

On peut également traiter la question des longueurs des tableaux associatifs en gardant une trace de la longueur du tableau avec un élément associatif appelé longueur.

aka:

myArray["length"]=0;

Lorsque vous ajoutez ou supprimez des éléments, ajoutez ou soustrayez simplement le myArrary["length"] élément.

Ensuite, vous pouvez faire des choses telles que:

theLength=myArray.length;
1
user2256383

Le tableau associatif n'a pas de propriété de longueur vous pouvez obtenir la longueur

0
viveksharma