将层次结构中的Json与Set Vars进行比较

时间:2014-08-28 14:26:28

标签: javascript jquery json comparison

我需要在json ID的产品页面上设置三个类别元变量。每个产品页面都可以在页面上包含任意数量的产品,每个产品都可以包含每个类别的值。

如果产品1有值,我们会使用它们。但是,如果产品1的零('无'类别)或未定义,则需要转到下一个产品,依此类推,直到找到类别值,或者将其设置为&# 39;无'如果它到达产品比较的末尾。

JSON

_jsonmeta = [
    { "Product": 1, "c1": 0, "c2": 1111, "c3": undefined },
    { "Product": 2, "c1": 2222, "c2": 2222, "c3": undefined }];
    //should set category1=2222, category2 = 1111, category3 = 0 ('None')

然后我通过传入项目和索引

来设置每个类别
function compareJson(json) {
        $.each(json, function (i, item) {
            //update if applicable
            category1 = checkForNullOrZero(item.c1, i);

            category2 = checkForNullOrZero(item.c2, i);

            category3 = checkForNullOrZero(item.c3, i);
        });

然后我需要一种方法来对当前值与所有其他产品进行排序,过滤或比较。各自的类别。

function checkForNullOrZero(categoryidarg, indexarg) {
        if (categoryidarg == null || typeof categoryidarg === 'undefined') {
            //ignore it if undefined
            console.log('Ignore: ' + categoryidarg);
        }
        else if (categoryidarg == 0) {
            //check the others because this category is 'None'
            console.log('Fall through to next: ' + _jsonmeta[indexarg]);
        }
        else {
            //check the hierarchy to see if this Area trumps the others
            console.log('Compare: ' + categoryidarg + ' vs ' + _jsonmeta[indexarg]);
        }

       //need to return category here
    }
    }

这是一个完整的小提琴:http://jsfiddle.net/TheFiddler/6mwpff7p/

1 个答案:

答案 0 :(得分:0)

为了这样做,从checkForNullOrZero函数你必须返回(1)当前类别的值或(2)该类别的当前产品的值。

我认为将类别定义为数组可能更容易:

var categories = [undefined,undefined,undefined];

然后更改compareJson函数:

function compareJson(json) {
    $.each(json, function (i, item) {
        //update if applicable
        categories[0] = checkForNullOrZero(item.c1, 0);

        categories[1] = checkForNullOrZero(item.c2, 1);

        categories[2] = checkForNullOrZero(item.c3, 2);
    });
}

然后从checkForNullOrZero函数中,您可以访问categories[indexarg],如果新值不会覆盖它,则应返回原始值。

这里有一个工作小提琴:

http://jsfiddle.net/6mwpff7p/5/

此解决方案的一个问题是检查每个产品,即使已经设置了所有类别。更好的解决方案可能是使用for循环。使用此方法的方法是:http://jsfiddle.net/6mwpff7p/6/