1. ホーム
  2. ジャバスクリプト

[解決済み】JavaScriptのオブジェクトの長さ

2022-03-18 19:15:05

質問

JavaScriptのオブジェクトを持っています。このオブジェクトの長さを取得するための組み込みの方法、または受け入れられているベストプラクティスの方法はありますか?

const myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;

解決方法は?

回答を更新しました

ここでは、2016年時点の最新情報と ES5を広く普及させる とそれ以降をご紹介します。 IE9+やその他すべてのモダンなES5+対応ブラウザの場合は Object.keys() となり、上記のコードになるだけです。

var size = Object.keys(myObj).length;

これは、既存のプロトタイプを変更する必要はありません。 Object.keys() はビルトインになりました。

編集 : オブジェクトは、Object.keyメソッドで返すことができないシンボリックプロパティを持つことができます。そのため、それについて言及しないと、回答が不完全になります。

Symbol型は、オブジェクトのプロパティにユニークな識別子を作成するために言語に追加されました。Symbol型の主な利点は、上書きを防止できることです。

Object.keys または Object.getOwnPropertyNames はシンボリックプロパティには使えません。それらを返すには Object.getOwnPropertySymbols .

var person = {
  [Symbol('name')]: 'John Doe',
  [Symbol('age')]: 33,
  "occupation": "Programmer"
};

const propOwn = Object.getOwnPropertyNames(person);
console.log(propOwn.length); // 1

let propSymb = Object.getOwnPropertySymbols(person);
console.log(propSymb.length); // 2

古い回答

最も堅牢な(つまり、最も少ないバグを引き起こしながら、やろうとしていることの意図を捉える)答えは、次のようになります。

Object.size = function(obj) {
  var size = 0,
    key;
  for (key in obj) {
    if (obj.hasOwnProperty(key)) size++;
  }
  return size;
};

// Get the size of an object
const myObj = {}
var size = Object.size(myObj);

JavaScriptでは、ある種の慣習として Object.prototype に何かを追加してはいけません。 なぜなら、様々なライブラリの列挙を壊してしまう可能性があるからです。オブジェクトにメソッドを追加することは、通常は安全です。