2012-03-13 110 views
1

javascript對象我有一個具有一個邏輯對象結構的主產品列表:比較使用jquery

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

我試圖與此相比,通過我建立了一個產品配置器應用程序創建的動態生成的對象陣列。該列表看起來像這樣一旦產生:使用$ .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)) 
}); 

難道我做錯了什麼在這裏,我有點希望這工作。

+0

如果你願意用underscore.js你可以使用它的'_.isEqual'方法。工作正常。請參閱:http://documentcloud.github.com/underscore/#isEqual – m90 2012-03-13 09:27:15

回答

0

首先有兩個錯誤在您例如:在你的主產品列表中,您有元素Attributes,但在你的代碼,你指的是它作爲productAttribute,並在列表zcs_edition您使用=代替:

對於你的問題:你不能比較JavaScript中的對象。 {a: 1, b: 2} == {a: 1, b: 2}將始終返回false,因爲它們是兩個不同的對象,即使它具有相同的屬性和屬性值。

您需要使用遍歷屬性並逐一比較它們的函數。例如見:Object comparison in JavaScript

但是這意味着你不能使用$.inArray,因爲它不能使用這樣的函數。你也必須自己迭代這個數組。

+0

我應該選擇那個。 – designmode 2012-03-13 12:35:06

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

{ edition="standard", license="perpetual"}是不是有效的對象

應該{ edition:"standard", license:"perpetual"}