我需要在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/
答案 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/