2012-03-13 109 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"}