2012-03-13 13 views
1

を使用してJavaScriptのオブジェクトを比較する:は、私は論理的なオブジェクト構造を持つマスター製品リストを持っているjqueryの

var myProducts = { 
    "productInfo":{ 
     "productVariations":[{ 
      "ID":XXXXXXX, 
      "Attributes":{ 
       "edition":'professional', 
       "license":"perpetual" 
      } 
     }, 
     { 
      "ID":XXXXXX, 
      "Attributes":{ 
       "edition":'standard', 
       "license":"perpetual" 
      } 
     }, 
     . 
     . 
     . 

私が構築している製品コンフィギュレータのアプリケーションで作成され、動的に生成されたオブジェクトの配列にこれを比較しようとしています。 doesntの以下のような要素を比較するために$ .inArrayを使用して

var zcs_edition = [{ edition="standard", license="perpetual"}, { edition="professional", license="perpetual" }] 

が有効であると思われる:

$.each(myProducts.productInfo.productVariations,function(i, val){ 
//console.log(this.productID); 
    //console.log(val.productAttributes ); 
    //console.log($.inArray(val.productAttributes, zcs_edition)) 
}); 

私はここで何か間違ったことをやっている、私は半分にこれを期待されるこのリストは、一度生成された、このようになります。作業。マスターの製品リストでは、要素Attributesを持っていますが、あなたのコードでは、あなたはproductAttributeとしてそれを参照している、とzcs_editionあなたのリストにあなたが=代わりの:を使用している:

+0

である必要があり、有効なオブジェクト

ではありません。正常に動作します。参照:http://documentcloud.github.com/underscore/#isEqual – m90

答えて

0

は、まず最初に、あなたの例では2個のエラーがあります。

問題:JavaScriptのオブジェクトを比較することはできません。 {a: 1, b: 2} == {a: 1, b: 2}は、常に2つの異なるオブジェクトであるため、常に同じプロパティとプロパティ値を持つことになるので、falseを返します。

プロパティを反復処理して1つずつ比較する関数を使用する必要があります。例:Object comparison in JavaScript

これは、このような機能を使用できないため、$.inArrayを使用できないことを意味します。配列自体も繰り返し処理する必要があります。

+0

私はそれを選ぶべきだった。 – designmode

0
var zcs_edition = [{ edition="standard", license="perpetual"}, { edition="professional", license="perpetual" }] 

{ edition="standard", license="perpetual"}それはあなたがその `_.isEqual`メソッドを使用することができunderscore.js使用して喜んでいる場合{ edition:"standard", license:"perpetual"}

関連する問題