web-dev-qa-db-ja.com

JavaScript連想配列の長さ

Js連想配列(またはオブジェクトとして呼び出すことを好む人もいます)

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

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

この質問 で述べたように、配列/オブジェクト全体を反復処理することはお勧めしません。なぜなら、私が持っている配列/オブジェクトは非常に大きいからです。

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

56
gopi1410

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

最も近いと思うのは、ES5以降の機能、Object.keysspec | [〜#〜] mdn [〜#〜] )、次のように使用できます。

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

Object.keysは、オブジェクト自体の列挙可能なプロパティの名前の配列を返します。しかし、もちろん内部的には、使用したくないループです(ES5以前の環境でのポリフィルはもちろんループを使用しています)。

別のES5 +機能もあります、Object.getOwnPropertyNamesspec | [〜#〜] mdn [〜#〜] )、オブジェクトの「独自の」プロパティ名の配列を返します。列挙可能。

両方とも 漠然と現代のものでサポートされています です。 IE9以降、および少なくとも2011年以降のChrome、Firefox、およびSafariのバージョン。


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?"
};
112
T.J. Crowder

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

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
8
kmario23

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

別名

myArray["length"]=0;

要素を追加または削除するときは、単にmyArrary["length"]要素。

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

theLength=myArray.length;
1
user2256383

連想配列には長さプロパティがありません 長さを取得できます

0
viveksharma