20

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

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

結果は次の配列になります。

["key1", "key2"]

または単なる文字列:

"key1, key2"
4

6 に答える 6

29

forたとえば、ループを介してそれらの配列を簡単に取得できます。

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

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

var keyString = keys.join(", ");

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

于 2010-12-09T15:42:46.370 に答える
26
options = {key1: "value1", key2: "value2"};
keys = Object.keys(options);
于 2012-03-08T10:52:07.947 に答える
5

それを行うjQueryの方法:

var keys = [];
options = {key1: "value1", key2: "value2"};
$.each(options, function(key, value) { keys.push(key) })
console.log(keys)
于 2010-12-09T15:45:32.197 に答える
3

現在、主要なブラウザのほとんどにはこの機能が組み込まれています。その方法は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;
    };
})();

このスニペットは、Nick Craver の例とほぼ同じように機能しますが、2 つの例外があります。

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

ただし、これ(およびここでの他の回答)は、IE列挙​​バグを回避できません。この回答の詳細とその部分的な回避策については、こちらを参照してください。

于 2010-12-09T16:09:59.203 に答える
2

使えるようになりました

Object.keys(obj)

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

于 2014-10-15T10:01:29.827 に答える
0

$.each()jQueryで使用できます:

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

それから

var keys = keyArray(options);

文字列を取得["key1", "key2"]できる配列として提供します。join

于 2010-12-09T15:45:48.020 に答える