web-dev-qa-db-ja.com

オブジェクトのキーの配列を取得

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

これより冗長な方法はありますか。

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

Object.keys :を使用してください。

var foo = {
  'alpha': 'puffin',
  'beta': 'beagle'
};

var keys = Object.keys(foo);
console.log(keys) // ['alpha', 'beta'] 
// (or maybe some other order, keys are unordered).

これはES5の機能です。これは現代のすべてのブラウザで動作することを意味しますが、 従来のブラウザでは動作しません

ES5シムは あなたが盗むことができるObject.keysの実装を持っています

556
Raynos

JQueryの $.map を使うことができます。

var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' },
keys = $.map(foo, function(v, i){
  return i;
});
59
Rocket Hazmat

もちろん、 Object.keys() は、オブジェクトのキーを取得するbest方法です。ご使用の環境で使用できない場合は、例のようなコードを使用して簡単にshimmedにすることができます(ループを考慮する必要がある場合を除く) Object.keys()の動作とは異なり、プロトタイプチェーンの上のすべてのプロパティを反復処理します)。

ただし、サンプルコード...

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

jsFiddle

...変更できます。 variable部分で割り当てを行うことができます。

var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [], i = 0;
for (keys[i++] in foo) {}

jsFiddle

もちろん、この動作はObject.keys()が実際に行うこととは異なります( jsFiddle )。 MDNドキュメントのshim を使用するだけです。

30
alex

あまり冗長ではありませんが、1行の要求で次の行を1行に強制するように促されました。Pythonicがどのようなものかはわかりません。)

var keys = (function(o){var ks=[]; for(var k in o) ks.Push(k); return ks})(foo);
6
George Jempty

N深さのネストしたオブジェクトのキーをフラットな配列としてリストする何かを探しているのであれば:

const getObjectKeys = (obj, prefix = '') => {
  return Object.entries(obj).reduce((collector, [key, val]) => {
    const newKeys = [ ...collector, prefix ? `${prefix}.${key}` : key ]
    if (Object.prototype.toString.call(val) === '[object Object]') {
      const newPrefix = prefix ? `${prefix}.${key}` : key
      const otherKeys = getObjectKeys(val, newPrefix)
      return [ ...newKeys, ...otherKeys ]
    }
    return newKeys
  }, [])
}

console.log(getObjectKeys({a: 1, b: 2, c: { d: 3, e: { f: 4 }}}))
1
Cody Moniz

概要

Objectのすべてのキーを取得するためにはObject.keys()を使うことができます。 Object.keys()はオブジェクトを引数として取り、すべてのキーの配列を返します。

例:

const object = {
  a: 'string1',
  b: 42,
  c: 34
};

const keys = Object.keys(object)

console.log(keys);

console.log(keys.length) // we can easily access the total amount of properties the object has

上記の例では、キー配列にキーconstを格納しています。これで、キー配列の長さを確認することで、オブジェクトのプロパティ数に簡単にアクセスできます。

Object.values()で値を取得する

Object.keys()の補完的な機能はObject.values()です。この関数は引数としてオブジェクトを取り、値の配列を返します。例えば:

const object = {
  a: 'random',
  b: 22,
  c: true
};


console.log(Object.values(object));
1

あなたがUnderscore.jsを使うことに決めたならば、あなたはもっとする

var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [];
_.each( foo, function( val, key ) {
    keys.Push(key);
});
console.log(keys);