2014-08-28 47 views
0

我需要從json ID在產品頁面上設置三個類別元變量。每個產品頁面可以包含頁面上的任意數量的產品,並且每個產品可以具有這些類別中的每個類別的值。將層次結構中的Json與設置變量進行比較

如果產品1有值,我們使用這些值。但是,如果產品1具有零('無'類別)或者未定義,則需要轉至下一個產品,等等,直到找到類別值,或者如果產品1到達產品比較結束。

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

爲了做到這樣,從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/

+0

太棒了,第二種方法更好。我會跟着去的,謝謝。 – User970008 2014-08-28 14:57:11

相關問題