сравнение объектов javascript с использованием jquery - PullRequest
1 голос
/ 13 марта 2012

У меня есть основной список продуктов с логической структурой объектов:

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

Я пытаюсь сравнить это с динамически генерируемым массивом объектов, созданным приложением-конфигуратором продуктов, которое я создал.Этот список выглядит следующим образом:

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

использование $ .inArray для сравнения элементов, как показано ниже, кажется неэффективным:

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

Я что-то здесь не так делаю,половина ожидала, что это сработает.

Ответы [ 2 ]

0 голосов
/ 13 марта 2012
var zcs_edition = [{ edition="standard", license="perpetual"}, { edition="professional", license="perpetual" }]

{ edition="standard", license="perpetual"} не является действительным объектом

должно быть { edition:"standard", license:"perpetual"}

0 голосов
/ 13 марта 2012

Во-первых, в вашем примере есть две ошибки: в вашем основном списке продуктов есть элемент Attributes, но в своем коде вы называете его productAttribute, а в своем списке zcs_edition вы используете= вместо :.

К вашей проблеме: Вы не можете сравнивать подобные объекты в JavaScript.{a: 1, b: 2} == {a: 1, b: 2} всегда будет возвращать false, потому что это два разных объекта, даже если они имеют одинаковые свойства и значения свойств.

Вам необходимо использовать функцию, которая выполняет итерацию по свойствам и сравнивает ихпо одному.См. Например: Сравнение объектов в JavaScript

Это, однако, означает, что вы не можете использовать $.inArray, потому что он не может использовать такую ​​функцию.Тебе тоже придется перебирать массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...