JavaScript 連想配列の長さ 質問する

JavaScript 連想配列の長さ 質問する

JavaScriptの連想配列があります(あるいはオブジェクトと呼ぶことを好む人もいるかもしれません)例えば、

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

この配列の長さを取得できる組み込み関数、または jQuery や他のライブラリでのソリューションはありますか? 現在、quesArr.length は 0 を返します。これはほとんどの方がご存知のとおりです。

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

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

ベストアンサー1

いいえ、オブジェクトにプロパティがいくつあるかを示す組み込みプロパティはありません (それがあなたが探しているものです)。プレーン オブジェクトで私が思いつく最も近いもの (代替案については読み続けてください) は、プロパティ キーの配列を返すものです (その配列は次のものlengthから取得できます)。

  • Object.keys- オブジェクトの配列を返します自分の列挙可能な、文字列キーのプロパティ。
  • Object.getOwnPropertyNames- と同様ですObject.keysが、列挙できないプロパティも含まれます。
  • Object.getOwnPropertySymbols- と同様ですObject.getOwnPropertyNamesが、文字列キーのプロパティではなく、シンボルキーのプロパティ用です。
  • Reflect.ownKeys- オブジェクト自身のプロパティの配列を返します (列挙可能かどうか、キーが文字列かシンボルかに関係なく)。

たとえば、Reflect.ownKeys次のように使用できます。

var quesArr = new Array(); // Keep reading, don't do this
quesArr["q101"] = "Your name?";
quesArr["q102"] = "Your age?";
quesArr["q103"] = "Your school?";
console.log(Reflect.ownKeys(quesArr).length); // 4 -- includes the built-in
                                              // `length` property!

配列の組み込みプロパティのため、3 ではなく 4 が表示されていることに注目してくださいlength。オブジェクトの機能を使用していないようなのでArray、配列にしないでください。プレーン オブジェクトにすることもできます。

const questions = {};
questions["q101"] = "Your name?";
questions["q102"] = "Your age?";
questions["q103"] = "Your school?";
// Or just:
// const questions = {
//    q101: "Your name?",
//    q102: "Your age?",
//    q103: "Your school?",
// };
console.log(Reflect.ownKeys(questions).length); // 3

しかし、何個入っているか知りたいのであれば、Mapなぜなら、オブジェクトとは異なり、Mapインスタンスはするエントリがいくつあるかを示すプロパティがあります。size

const questions = new Map();
questions.set("q101", "Your name?");
questions.set("q102", "Your age?");
questions.set("q103", "Your school?");
// Or you can pre-fill the `Map` by passing an array of `[name, value]` arrays:
// const questions = new Map([
//     ["q101", "Your name?"],
//     ["q102", "Your age?"],
//     ["q103", "Your school?"],
// ]);
console.log(questions.size); // 3

おすすめ記事