2012-02-25 4 views
0

私は複数のプロパティを持つことができるグローバルオブジェクトMyFruitsを持っています。少なくとも、ApplesとOrangeの2つのプロパティがあります。私はそれがこれらの2つ以上のプロパティを持っているかどうかを調べる必要があります。javascriptのテストオブジェクトのプロパティ

現時点では、MyFruitsを文字列化し、ApplesプロパティとOrangesプロパティだけで新しいオブジェクトを作成し、文字列化して両方の文字列の長さを比較します。このような何か:それは働いているように今の

var JsonString1 = JSON.stringify(MyFruits); 

var test2 = new Object(); 
test2.Apples= MyFruits.Apples; 
test2.Oranges= MyFruits.Oranges; 

var JsonString2= JSON.stringify(test2); 

alert(JsonString1.length - JsonString2.length); 

は、それが最初に思える:MyFruitsはちょうど2つの主なものよりも多くのプロパティが含まれている場合、長さの違いがObject.keys(obj).lengthあります0

とは異なりますメソッドは、オブジェクトのプロパティの数を数えることができますが、それは新しく、すべてのブラウザでサポートされていないので、私はそれを使用するつもりはありません。

これを行う最も良い方法ですか?もっと良い方法があれば教えてください。

ご意見ありがとうございます。

+0

参照:https://github.com/kriskowal/es5-shim –

+0

オブジェクトのプロパティの数を数えますか? –

答えて

2

代わりにオブジェクトをシリアライズ、あなたはオブジェクトを介して、より良いループをいただきたい、とApplesまたはOrangesではない任意のプロパティがありますかどうかを確認:あなただけの列挙キーが必要な場合

for (var i in MyFruits) { 
    if (MyFruits.hasOwnProperty(i) && i !== 'Apples' && i !== 'Oranges') { 
     throw 'Not expected!'; // Do something, eg: error_flag=true;break; 
    } 
} 
3

2つ以上のプロパティがあるかどうかを調べるには、プロパティを列挙し、2つ以上が存在するかどうかを確認してください。

var count = 0; 
for (var name in test2) { 
    if (test2.hasOwnProperty(name)) { 
    count++; 
    if (count > 2) { 
     break; 
    } 
    } 
} 

if (count > 2) { 
    // Has more than 2 properties 
} 
+0

また 'count'変数を' name!= 'Apples' && name!= 'Oranges''を探すif文で置き換えることもできます。 – djd

+0

@Dave true、これはこれを行うもう1つの有効な方法です。 – JaredPar

0

Object.keys()が実装されていない場合、JSONオブジェクト(すべての主要なブラウザでは利用できません)を使用する代わりに、Objectを拡張することを検討します。

if (typeof Object.keys === 'undefined') { 

    Object.keys = function (obj) { 

     var keys = []; 
     for (var property in obj) { 
      keys.push(property); 
     } 

     return keys; 

    } 

} 

今、あなたは常にObject.keys(yourObject)を呼び出し、オブジェクトキーのリストを取得することができます。

+0

ネイティブJSONをサポートしていない唯一の「メジャーブラウザ」はIE7-です。 JSON:[Compatibility table](https://developer.mozilla.org/ja/JavaScript/Reference/Global_Objects/JSON#Browser_compatibility)も参照してください。 –

+0

@RobWだから?私の声明はまだ有効です。残念ながら、IE7は依然としてWeb開発者のターゲットとする必要があります。 –

+0

私はあなたの声明を無効にしませんでした。私は、IEが唯一の「主要なブラウザ」(約3-6%の市場シェアを持っていることに気づいた([3.34](http://gs.statcounter.com/#browser_version-ww-monthly-201202-201202-bar ) - [5.93](http://www.w3counter.com/globalstats.php?year=2012&month=1) - [4](http://www.getclicky.com/marketshare/global/web-browsers/internet -explorer /)))はネイティブJSONをサポートしていません。 –

関連する問題