Longueur d'un tableau associatif javascript

j'ai un js tableau associatif (ou certains préfèrent l'appeler comme un objet) , comme, par exemple

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

y a-t-il une fonction intégrée qui pourrait obtenir la longueur de ce tableau, ou n'importe quelle solution dans jQuery ou autre bibliothèque? Actuellement quesArr.la longueur donnerait 0, comme la plupart d'entre vous devez être au courant.

s'il vous Plaît ne suggérons de parcourir l'ensemble du tableau/objet comme mentionné dans cette question , parce que le tableau/objet que j'ai est très grand.

puis-je continuer?

40
demandé sur Community 2012-05-12 15:20:45

4 réponses

Non, il n'y a pas de propriété intégrée qui vous indique le nombre de propriétés de l'objet (ce que vous recherchez).

la caractéristique la plus proche à laquelle je peux penser est une 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 que boucle que vous ne vouliez pas utiliser (et le polyfill pour cela pour les environnements pre-ES5 utilise une boucle, bien sûr).

il y a aussi une autre fonctionnalité ES5+, Object.getOwnPropertyNames ( spec | MDN ), qui renvoie un tableau des noms de propriétés" propres " de l'objet, qu'ils soient ou non dénombrables.

tous les deux sont soutenu dans n'importe quoi vaguement moderne . IE9+, et les versions de Chrome, Firefox, et Safari depuis au moins 2011.


FWIW, à moins que vous n'utilisiez les caractéristiques Array de l'objet, n'en faites pas un tableau. À la place:

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

ces clés n'ont pas à être données en caractères de chaîne entre crochets, non plus, si vous ne voulez pas qu'elles le soient (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 partition si vous préférez; ils sont exactement équivalent sauf qu'avec la notation pointillée les clés doivent être des identificateurs valides (dans la notation entre crochets ils peuvent être n'importe quoi).

Vous pouvez même le faire:

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

ou (si les touches n'est pas valide identifiants):

var quesArr={
    "q101": "Your name?",
    "q102": "Your age?",
    "q103": "Your school?"
};
81
répondu T.J. Crowder 2018-08-31 07:48:41

supposons que vous ayez ce qui suit,

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 y a une façon de calculer la longueur dans les navigateurs modernes.(Chrome, FF4+, IE9)

Object.keys(myObject);  
// --> ["city", "state", "country"]
Object.keys(myObject).length
// --> 3
6
répondu kmario23 2014-11-25 06:32:47

on peut aussi traiter la question de la longueur des tableaux associatifs en gardant la trace de la longueur du tableau avec un élément associatif appelé longueur.

alias :

myArray["length"]=0;

comme vous ajoutez ou supprimez des éléments il suffit d'ajouter ou de soustraire de l'élément myArrary["length"] .

, Alors vous pouvez faire des choses comme:

theLength=myArray.length;
1
répondu user2256383 2014-03-05 13:00:26

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

1
répondu viveksharma 2017-02-12 11:15:39