JavaScriptを使用して、連想配列のキーを配列またはコンマ区切りリストに抽出する簡単な方法があるかどうか疑問に思っていました(jQueryは問題ありません)。
options = {key1: "value1", key2: "value2"};
結果は次の配列になります。
["key1", "key2"]
または単なる文字列:
"key1, key2"
JavaScriptを使用して、連想配列のキーを配列またはコンマ区切りリストに抽出する簡単な方法があるかどうか疑問に思っていました(jQueryは問題ありません)。
options = {key1: "value1", key2: "value2"};
結果は次の配列になります。
["key1", "key2"]
または単なる文字列:
"key1, key2"
for
たとえば、ループを介してそれらの配列を簡単に取得できます。
var keys = [];
for(var key in options) {
if(options.hasOwnProperty(key)) { //to be safe
keys.push(key);
}
}
次にkeys
、たとえば次のように使用します。
var keyString = keys.join(", ");
ここでテストできます。.hasOwnProperty()
誰かがオブジェクトのプロトタイプなどをいじった場合に備えて、チェックは安全です。
options = {key1: "value1", key2: "value2"};
keys = Object.keys(options);
それを行うjQueryの方法:
var keys = [];
options = {key1: "value1", key2: "value2"};
$.each(options, function(key, value) { keys.push(key) })
console.log(keys)
現在、主要なブラウザのほとんどにはこの機能が組み込まれています。その方法は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 つの例外があります。
hasOwnProperty
コレクションにメソッドがない Internet Explorer の厄介な DOM 関連の問題を回避します。ただし、これ(およびここでの他の回答)は、IE列挙バグを回避できません。この回答の詳細とその部分的な回避策については、こちらを参照してください。
$.each()
jQueryで使用できます:
function keyArray(obj) {
var rv = [];
$.each(options, function(key) { rv.push(key); });
return rv;
}
それから
var keys = keyArray(options);
文字列を取得["key1", "key2"]
できる配列として提供します。join