オブジェクトのプロパティ名を取得する


179

JavaScriptにそのようなオブジェクトをループ処理する方法があるかどうか疑問に思っていました。

for(var i in myObject) {
    // ...
}

しかし、このように各プロパティの名前を取得します。

for(var i in myObject) {
    separateObj[myObject[i].name] = myObject[i];
}

Googleでそのようなものを見つけることができないようです。彼らは変数の名前を一緒に渡すと言っていますが、これは私が達成しようとしていることのオプションではありません。

あなたが提供できるあらゆる助けをありがとう。



4
seperateする必要がありますseparate
ファン・メンデス

13
@JuanMendesありがとう、修正済み。うわー、この質問は過去からの爆発です。'l' + new Array(1000).join('o') + 'ng'それ以来私は道を歩んできた。
Olical、2013年

1
チェックされた答えが正しくありません。Object.keys()メソッドを使用してください。
ケビンフロリダ州

チェックされた答えとObject.keys()の処理は異なるので、目的に応じて、どちらが正しいかが異なります。
Gabe Johnson

回答:


163

Object.keys()を使用します

var myObject = { a: 'c', b: 'a', c: 'b' };
var keyNames = Object.keys(myObject);
console.log(keyNames); // Outputs ["a","b","c"]

Object.keys() 入力オブジェクトに属するプロパティ名の配列を提供します。


3
より具体的には、Object.keys(obj)は、渡されたobjに属するプロパティ名の配列、つまりキーを返します。
学習者に名前がない

1
追加、Object.keys()は列挙可能なプロパティのみを返し、Object.getOwnProperties()はそのすべてのプロパティを返します
bitfishxyz

192

i 名前です。

for(var name in obj) {
    alert(name);
    var value = obj[name];
    alert(value);
}

だからあなたはできる:

seperateObj[i] = myObject[i];

1
オブジェクトのプロパティには、ブラケット構文を使用してアクセスできます。obj.prop1はobj ['prop1']と同じです。
Josiah Ruddell、2010年

5
for..inを使用する場合はHasOwnPropertyを使用することをお勧めします
バクダン

5
@Bakudanはあなたが何を意味するかを知っていますが、より良い方法は、hasOwnProperty継承されたプロパティが必要ない場合に使用することです。そうすれば、あなたは盲目的にいくつかのルールに従っていません。場合によっては、継承されたプロパティを実際に確認したい場合があります。オブジェクト自身のプロパティをループする別の方法は、Object.keysを使用することですObject.keys(obj).forEach(function(prop){ alert obj[prop]})
ファンメンデス、2014

@Juan Mendesはい、私は継承されたプロパティを持つケースを意味しました。IE8はObject.keysをサポートしていないため、私は(悲しいことに)このアプローチを使用せざるを得ません...
Bakudan

17

免責事項 「オブジェクトがアタッチされているプロパティ名はわかりますか?」


いいえ、オブジェクトは複数のプロパティにアタッチできるため、その名前を知る方法はありません。

var obj = {a:1};
var a = {x: obj, y: obj}

objの名前は何でしょうか?

forループのプロパティ名だけが必要ではないですか?

for (var propName in obj) {
  console.log("Iterating through prop with name", propName, " its value is ", obj[propName])
}

@ChadSchougginsあなたが言ったことは本当ですが、私が答えている質問ではありません。そうです、オブジェクトをループして各プロパティ名を取得できます。OPが意図したものではない可能性がある質問に答えていますが、複数のプロパティが同じオブジェクトを指す可能性があることを明確にしたいと思います。
ファンメンデス、

7

オブジェクトで簡単に反復できます

例:オブジェクトがvarの場合a = {a: 'apple'、b: 'ball'、c: 'cat'、d: 'doll'、e: 'elephant'};

Object.keys(a).forEach(key => {
   console.log(key) // returns the keys in an object
   console.log(a[key])  // returns the appropriate value 
})

6

位置によるオブジェクトプロパティへの直接アクセスの場合...プロパティ[0]の場合に一般的に役立ちます...したがって、詳細情報を保持します...または最初にロードされた外部モジュールのnode.js 'require.cache [0]'になど

Object.keys( myObject )[ 0 ]
Object.keys( myObject )[ 1 ]
...
Object.keys( myObject )[ n ]

4

「Object.keys(obj)」の他に、オブジェクトの列挙可能なプロパティ名をループする非常に単純な「for ... in」ループがあります。

const obj = {"fName":"John","lName":"Doe"};

for (const key in obj) {
    //This will give key
      console.log(key);
    //This will give value
    console.log(obj[key]);
    
}


3

オブジェクトのプロパティ、または母国語が何であるかに応じて「配列キー」または「配列インデックス」を取得するには..... Object.keys()メソッドを使用します。

重要:これは「最新のブラウザ」とのみ互換性があります。

したがって、オブジェクトが呼び出された場合、myObject ...

var c = 0;
for(c in myObject) {
    console.log(Object.keys(myObject[c]));
}

ワラ!これは間違いなく最新のFirefoxとIE11とChromeで動作します...

MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keysにいくつかのドキュメントがあり ます


2

ES5

例えばあなたはこの種のオブジェクトを持っています:

var ELEMENTS = {
    STEP_ELEMENT: { ID: "0", imageName: "el_0.png" },
    GREEN_ELEMENT: { ID: "1", imageName: "el_1.png" },
    BLUE_ELEMENT: { ID: "2", imageName: "el_2.png" },
    ORANGE_ELEMENT: { ID: "3", imageName: "el_3.png" },
    PURPLE_ELEMENT: { ID: "4", imageName: "el_4.png" },
    YELLOW_ELEMENT: { ID: "5", imageName: "el_5.png" }
};

そして今、あなたがパラメータとして「0」を渡す場合-「STEP_ELEMENT」を取得する場合、「2」の場合「BLUE_ELEMENT」を取得する場合などの関数が必要な場合

function(elementId) {
    var element = null;

    Object.keys(ELEMENTS).forEach(function(key) {
        if(ELEMENTS[key].ID === elementId.toString()){
            element = key;
            return;
        }    
    });

    return element;
}

これはおそらく問題の最良の解決策ではありませんが、それを行う方法についてのアイデアを与えるのは良いことです。

乾杯。



0

最初に置いたfor / inループを実行するとき、iはプロパティ名です。したがって、プロパティ名iがあり、myObject [i]を実行して値にアクセスします。


0

これらのソリューションも機能します。

// Solution One
function removeProperty(obj, prop) {
  var bool;
  var keys = Object.keys(obj);
  for (var i = 0; i < keys.length; i++) {
    if (keys[i] === prop) {
      delete obj[prop];
      bool = true;
    } 
  }
  return Boolean(bool);
}


//Solution two
function removeProperty(obj, prop) {
  var bool;
  if (obj.hasOwnProperty(prop)) {
      bool = true;
      delete obj[prop];
  }
  return Boolean(bool);
}

0

Object.keys()からプロパティを取得する関数を使用するとObject、名前でプロパティを検索できます。次に例を示します。

const Products = function(){
    this.Product = "Product A";
    this.Price = 9.99;
    this.Quantity = 112;
};

// Simple find function case insensitive
let findPropByName = function(data, propertyName){
 let props = [];
 Object.keys(data).forEach(element => {
    return props.push(element.toLowerCase());
  });
  console.log(props);
  let i = props.indexOf(propertyName.toLowerCase());

  if(i > -1){
    return props[i];
  }
  return false;
};

// calling the function
let products = new Products();
console.log(findPropByName(products, 'quantity'));

-1

クイック&ダーティー:

function getObjName(obj) {
  return (wrap={obj}) && eval('for(p in obj){p}') && (wrap=null);
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.