451

jQuery または純粋な JavaScript で、JavaScript オブジェクトのキーを配列として取得したいと考えています。

これよりも冗長でない方法はありますか?

var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [];
for (var key in foo) {
    keys.push(key);
}
4

8 に答える 8

59

jQueryを使用できます$.map

var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' },
keys = $.map(foo, function(v, i){
  return i;
});
于 2012-01-06T19:18:22.553 に答える
36

もちろん、オブジェクトのキーを取得する最良の方法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 を使用するだけです。

于 2012-06-08T03:58:35.163 に答える
7

冗長性が低いことについてはわかりませんが、ワンライナーリクエストによって次の行を1行に強制するように促されました.Pythonicがどのようになっているのかわかりません;)

var keys = (function(o){var ks=[]; for(var k in o) ks.push(k); return ks})(foo);
于 2012-01-06T19:29:35.000 に答える
0

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

とはいえ、組み込みオブジェクトの拡張は物議を醸しています。

于 2021-12-17T02:16:00.827 に答える