web-dev-qa-db-ja.com

JavaScriptオブジェクトのすべてのキーを取得する

連想配列のキーを配列にすばやく抽出する方法、またはJavaScriptを使用してコンマ区切りのリストを抽出する方法があるかどうか疑問に思っていました(jQueryは問題ありません)。

options = {key1: "value1", key2: "value2"};

結果は配列になるはずです:

["key1", "key2"]

または単に文字列:

"key1, key2"
18
tishma

forループを介してそれらの配列を簡単に取得できます。次に例を示します。

_var keys = [];
for(var key in options) {
  if(options.hasOwnProperty(key)) { //to be safe
    keys.Push(key);
  }
}
_

次に、keysを使用して、たとえば次のようにします。

_var keyString = keys.join(", ");
_

ここでテストできます.hasOwnProperty() チェックは、誰かがオブジェクトのプロトタイプなどをいじった場合に備えて安全です。

26
Nick Craver
options = {key1: "value1", key2: "value2"};
keys = Object.keys(options);
24
pwl

それを行うjQueryの方法:

var keys = [];
options = {key1: "value1", key2: "value2"};
$.each(options, function(key, value) { keys.Push(key) })
console.log(keys)
5
Ege Özcan

これで使用できます

Object.keys(obj)

オブジェクトで使用可能なキーで構成される配列を取得します。 Mozillaには使用法と可用性の情報があります

2
Ege Özcan

主要なブラウザのほとんどにこの機能が組み込まれています。メソッドは Object.keys() です。

var keys = Object.keys(options);
//-> ["key1", "key2"]

小さなスニペットを使用して、これをサポートしていないブラウザーに実装することもできます。

Object.keys = Object.keys || (function () {
    var hasOwnProperty = Object.prototype.hasOwnProperty;

    return function (o) {
        if (typeof o != "object" && typeof o != "function" || o === null)
            throw new TypeError("Object.keys called on a non-object");

        var result = [];
        for (var name in o) {
            if (hasOwnProperty.call(o, name))
                result.Push(name);
        }

        return result;
    };
})();

そのスニペットは、2つの例外を除いて、Nick Craverの例のスニペットとほとんど同じように機能します。

  • Object(または、連想配列)以外のものを渡すと、意味のあるTypeErrorがスローされます。
  • これは、コレクションにhasOwnPropertyメソッドがないInternet ExplorerのDOM関連の厄介な問題を回避します。

これ(およびここでの他の回答)はIE列挙のバグを回避しません。詳細については、 この答えはこちら

2
Andy E

JQueryで$.each()を使用できます。

function keyArray(obj) {
  var rv = [];
  $.each(options, function(key) { rv.Push(key); });
  return rv;
}

その後

var keys = keyArray(options);

あなたにあげる ["key1", "key2"]配列として。これをjoinして文字列を取得できます。

0
Pointy