70

私はJavaScriptの連想配列を持っています(またはそれをオブジェクトと呼ぶことを好む人もいます)

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

この配列の長さを取得できる組み込み関数、またはjQueryや別のライブラリのソリューションはありますか?ほとんどの人が知っている必要があるため、現在quesArr.lengthは0になります。

私が持っている配列/オブジェクトは非常に大きいので、この質問で述べたように配列/オブジェクト全体を反復することを提案しないでください。

これを進める方法はありますか?

4

4 に答える 4

156

いいえ、オブジェクトに含まれるプロパティの数(探しているもの)を示す組み込みのプロパティはありません。

私が考えることができる最も近いものは、2つのES5以降の機能Object.keysspec | MDN)とObject.getOwnPropertyNamesspec | MDN)です。たとえば、次のように使用できますObject.keys

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

Object.keysオブジェクト自体の列挙可能な文字列名付きプロパティの名前の配列を返します。しかし、内部的には(理論的には)使用したくないループです(もちろん、ES5以前の環境用のポリフィルはループを使用します)。列挙できない文字列名のプロパティも必要な場合は、Object.getOwnPropertyNames代わりに使用します。

ES2015 +では、オブジェクトは、キーが文字列ではなくシンボルであるプロパティを持つことができます。Object.getOwnPropertySymbolsspec | MDN)を使用すると、それらを取得できます。


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

それらは一重引用符または二重引用符にすることができます。

于 2012-05-12T11:24:00.130 に答える
13

次のものがあるとします。

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、Firefox 4+、および Internet Explorer 9) で長さを計算する方法があります。

Object.keys(myObject);
// --> ["city", "state", "country"]
Object.keys(myObject).length
// --> 3
于 2014-11-25T06:32:47.523 に答える
1

lengthと呼ばれる連想要素を使用して配列の長さを追跡することにより、連想配列の長さの問題に対処することもできます。

として知られている

myArray["length"] = 0;

要素を追加または削除するときは、要素を追加または削除するだけmyArray["length"]です。

次に、次のようなことができます。

theLength = myArray.length;
于 2013-04-08T06:28:30.057 に答える