jQuery または純粋な JavaScript で、JavaScript オブジェクトのキーを配列として取得したいと考えています。
これよりも冗長でない方法はありますか?
var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [];
for (var key in foo) {
keys.push(key);
}
jQuery または純粋な JavaScript で、JavaScript オブジェクトのキーを配列として取得したいと考えています。
これよりも冗長でない方法はありますか?
var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [];
for (var key in foo) {
keys.push(key);
}
jQueryを使用できます$.map
。
var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' },
keys = $.map(foo, function(v, i){
return i;
});
もちろん、オブジェクトのキーを取得する最良の方法Object.keys()
です。環境で利用できない場合は、例のようなコードを使用して簡単にシミングできます (ただし、ループの動作とは異なり、プロトタイプ チェーンのすべてのプロパティをループが反復することを考慮する必要がありますObject.keys()
)。
ただし、サンプルコード...
var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [];
for (var key in foo) {
keys.push(key);
}
jsFiddle .
...変更できます。変数部分で直接割り当てを行うことができます。
var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [], i = 0;
for (keys[i++] in foo) {}
jsFiddle .
もちろん、この動作はObject.keys()
実際の動作 ( jsFiddle ) とは異なります。MDN documentation で shim を使用するだけです。
冗長性が低いことについてはわかりませんが、ワンライナーリクエストによって次の行を1行に強制するように促されました.Pythonicがどのようになっているのかわかりません;)
var keys = (function(o){var ks=[]; for(var k in o) ks.push(k); return ks})(foo);
2022 年になっても、JavaScript にはまだハッシュを処理する適切な方法がありませんか?
これは警告を発行しますが、機能します:
Object.prototype.keys = function() { return Object.keys(this) }
console.log("Keys of an object: ", { a:1, b:2 }.keys() )
// Keys of an object: Array [ "a", "b" ]
// WARN: Line 8:1: Object prototype is read only, properties should not be added no-extend-native
とはいえ、組み込みオブジェクトの拡張は物議を醸しています。