Lengte van een JavaScript-associatieve array

Ik heb een JavaScript-associatieve array (of sommigen noemen het misschien liever een object)zoals, laten we zeggen

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

Is er een ingebouwde functie die de lengte van deze array kan krijgen, of een oplossing in jQuery of een andere bibliotheek? Momenteel zou quesArr.length 0 opleveren, zoals de meesten van jullie zullen weten.

Stel niet voor om de hele array/het hele object te herhalen, zoals vermeld in dit vraag, omdat de array/het object dat ik heb erg groot is.

Is er een manier waarop ik hiermee verder kan gaan?


Antwoord 1, autoriteit 100%

Nee, er is geen ingebouwde eigenschap die u vertelt hoeveel eigenschappen het object heeft (en dat is wat u zoekt).

Het dichtst dat ik kan bedenken zijn twee ES5 en hogere functies, Object.keys(spec| MDN) en Object.getOwnPropertyNames(spec| MDN). U kunt bijvoorbeeld Object.keysals volgt gebruiken:

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

Object.keysretourneert een array van de namen van de eigen opsombare eigenschappen van een object met de naam string. Maar intern (in theorie) is het die lus die je niet wilde gebruiken (en de polyfill ervoor voor pre-ES5-omgevingen gebruikt natuurlijk een lus). Als u ook niet-opsombare eigenschappen met tekenreeksen wilt, gebruikt u in plaats daarvan Object.getOwnPropertyNames.

In ES2015+ kan een object eigenschappen hebben waarvan de sleutels Symbolen zijn in plaats van strings. Object.getOwnPropertySymbols(spec| MDN) laat je ze krijgen.


FWIW, tenzij je de Array-functies van het object gaat gebruiken, maak er dan geen array van. In plaats daarvan:

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

Die sleutels hoeven ook niet als letterlijke tekenreeksen tussen vierkante haken te worden gegeven, als u dat niet wilt (of u nu een array of een gewoon object gebruikt):

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

Maar je kunt desgewenst de andere notatie gebruiken; ze zijn exact gelijk, behalve dat met gestippelde notatie de sleutels geldige identificatienamen moeten zijn (tussen haakjes kunnen ze van alles zijn).

U kunt zelfs dit doen:

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

of (als de sleutels geen geldige identificatiegegevens zijn):

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

Dit kunnen enkele of dubbele aanhalingstekens zijn.


Antwoord 2, autoriteit 8%

Stel dat je het volgende hebt,

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

Maar er is een manier om de lengte te berekenen in moderne browsers (Chrome, Firefox 4+ en Internet Explorer 9):

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

Antwoord 3

Men kan ook omgaan met de kwestie van lengtekwesties van associatieve arrays door de lengte van de array bij te houden met een associatief element genaamd length.

Zoals bekend als:

myArray["length"] = 0;

Terwijl u elementen toevoegt of verwijdert, voegt u eenvoudig het element myArray["length"]toe aan of trekt u het af.

Dan kun je dingen doen zoals:

theLength = myArray.length;

Antwoord 4

Een associatieve array heeft niet de eigenschap length, maar u kunt lengte krijgen.

Other episodes