2013-10-24 88 views
0

我有一個JSON對象,它是這樣的,我有和我的JSON對象「單品」價值隨機參數使用jquery獲取與json對象中提供的值匹配的對象?

 var mytestvalue="Fit:Regular,Color:Coyote (120)"; or 
     var mytestvalue="Color:Coyote (120),Fit:Regular"; 


    [ 
     { 
      "index":0, 
     "title":"Foo1", 
     "skus":"Fit:Regular,Size:6,Color:Coyote (120)", 
    }, 
    { 
     "index":1, 
     "title":"Foo2", 
     "skus":"Fit:Regular,Color:Coyote (120),Size:65", 
    }, 
    { 
     "index":2, 
     "title":"Foo3", 
     "skus":"Fit:Regular,Size:7,Color:Coyote (120)", 
    }, 
    { 
     "index":0, 
     "title":"Foo4", 
     "skus":"Color:Coyote (120),Fit:Regular,Size:7.5", 
     }, 
     { 
     "index":1, 
     "title":"Foo5", 
     "skus":"Fit:Slim,Size:8,Color:Coyote (120)", 
     }, 
    { 
     "index":2, 
     "title":"Foo6", 
     "skus":"Fit:Regular,Size:9,Color:Coyote (120)", 
    }, 
    { 
     "index":0, 
     "title":"Foo7", 
     "skus":"Fit:Regular,Size:8.5,Color:Coyote (120)", 
    }, 
    { 
     "index":1, 
     "title":"Foo8", 
     "skus":"Fit:Regular,Size:10,Color:Coyote (120)", 
}, 
{ 
     "index":2, 
    "title":"Foo9", 
     "skus":"Fit:Slim,Color:Coyote (120),Size:13", 
}, 
{ 
     "index":0, 
     "title":"Foo10", 
     "skus":"Fit:Regular,Size:8.5,Color:Coyote (120)", 
}, 
{ 
     "index":1, 
     "title":"Foo11", 
     "skus":"Fit:Regular,Size:10,Color:Coyote (120)", 
}, 
{ 
     "index":2, 
     "title":"Foo12", 
     "skus":"Fit:Regular,Color:Coyote (120),Size:13", 
} 
    ] 

我寫了一個函數來獲得的SKU匹配的組合變量i有

function getSkuCombinations(obj,prodskuval) { 
    var combres = $.grep(obj, function (o) { //Will give you all the matches 
      return o.SKUOptions.indexOf(prodskuval) > -1; 
    }); 
    return combres; 
} 

我這樣調用

 var combinationresults=getSkuCombinations(myobj,mytestvalue) 
此功能

當我這樣做,我應該得到所有這些都是組合「mytestvalue」這是我通過,但這個功能現在只返回我

 var myresult= [{ 
       "index":1, 
       "title":"Foo2", 
       "skus":"Fit:Regular,Color:Coyote (120),Size:65", 
        }] 

任何一個可以幫助我在做這個

此功能的單品解決我的問題,

 function getSkuCombinations(obj,prodskuval) { 
      var combres = $.grep(obj, function (o) { //Will give you all the matches 
       var newskus=o.skus.split(',').sort().join(',');    
       var newprdskus=prodskuval.split(',').sort().join(',');    
        return newskus.indexOf(newprdskus) > -1; 
     }); 
    } 
+0

您的函數getSkuCombinations不會返回任何內容。必須返回梳理? – Jhonathan

+0

是的,我忘了addit這裏是的,它返回梳理 – SoftwareNerd

+0

@Jhonathan我改變了,你現在可以檢查這個 – SoftwareNerd

回答

0

這是解決我的問題的方法

function getSkuCombinations(obj,prodskuval) { 
     var combres = $.grep(obj, function (o) { //Will give you all the matches 
      var newskus=o.skus.split(',').sort().join(',');    
      var newprdskus=prodskuval.split(',').sort().join(',');    
       return newskus.indexOf(newprdskus) > -1; 
    }); 
} 
+0

好吧,如果你表達了你想要匹配是基於準屬性('name:value',用','作爲普通字符串的一部分)進行匹配不管這些準屬性的順序如何,數組元素中的「skus」,那麼也許有人會想到這一點。 無論我們付出的努力如何,以下是建議:將準屬性字符串('mytestvalue')重構爲一個實際的對象,然後更改'getSkuCombinations()'以像這樣工作。這樣,除了你之外的其他人將會在以後的代碼中對這些代碼做一些理解:) – Saran

0

試試這個:

功能getSkuCombinations(OBJ,prodskuval){ var combres = $ .each(obj,function(key,value){//將給你所有的匹配 返回val.skus.indexOf(prodskuval)> -1; }); }

+0

這個選項不考慮SKUS特徵的不同順序 – Jhonathan

0

用Node.js測試它。如果更改SKUOptions(不知道啥子是)以skus(在myobj JSON對象的屬性),那麼它的工作原理:

var $ = require('jquery'); 

var mytestvalue = "Fit:Regular,Color:Coyote (120)"; 
// var mytestvalue = "Color:Coyote (120),Fit:Regular"; 

var myobj = [{ 
    "index": 0, 
    "title": "Foo1", 
    "skus": "Fit:Regular,Size:6,Color:Coyote (120)", 
}, { 
    "index": 1, 
    "title": "Foo2", 
    "skus": "Fit:Regular,Color:Coyote (120),Size:65", 
}, { 
    "index": 2, 
    "title": "Foo3", 
    "skus": "Fit:Regular,Size:7,Color:Coyote (120)", 
}, { 
    "index": 0, 
    "title": "Foo4", 
    "skus": "Color:Coyote (120),Fit:Regular,Size:7.5", 
}, { 
    "index": 1, 
    "title": "Foo5", 
    "skus": "Fit:Slim,Size:8,Color:Coyote (120)", 
}, { 
    "index": 2, 
    "title": "Foo6", 
    "skus": "Fit:Regular,Size:9,Color:Coyote (120)", 
}, { 
    "index": 0, 
    "title": "Foo7", 
    "skus": "Fit:Regular,Size:8.5,Color:Coyote (120)", 
}, { 
    "index": 1, 
    "title": "Foo8", 
    "skus": "Fit:Regular,Size:10,Color:Coyote (120)", 
}, { 
    "index": 2, 
    "title": "Foo9", 
    "skus": "Fit:Slim,Color:Coyote (120),Size:13", 
}, { 
    "index": 0, 
    "title": "Foo10", 
    "skus": "Fit:Regular,Size:8.5,Color:Coyote (120)", 
}, { 
    "index": 1, 
    "title": "Foo11", 
    "skus": "Fit:Regular,Size:10,Color:Coyote (120)", 
}, { 
    "index": 2, 
    "title": "Foo12", 
    "skus": "Fit:Regular,Color:Coyote (120),Size:13", 
}]; 

function getSkuCombinations(obj, prodskuval) { 
    var combres = $.grep(obj, function(o) { //Will give you all the matches 
    return o.skus.indexOf(prodskuval) > -1; 
    }); 
    return combres; 
} 

var combinationresults = getSkuCombinations(myobj, mytestvalue) 
console.log(combinationresults); 

返回:

[ { index: 1, 
    title: 'Foo2', 
    skus: 'Fit:Regular,Color:Coyote (120),Size:65' }, 
    { index: 2, 
    title: 'Foo12', 
    skus: 'Fit:Regular,Color:Coyote (120),Size:13' } ] 

的jsfiddle(尋找console.log)http://jsfiddle.net/Saran/Y8wwE/

+0

這個選項不考慮skus的特徵順序 – Jhonathan

+0

對不起,我不知道SKUOptions是什麼。你可以粘貼你的代碼的一部分? – Saran

1
var mytestvalue="Fit:Regular,Color:Coyote (120)"; or 
     var mytestvalue="Color:Coyote (120),Fit:Regular";  

var myobj = [ 
      { 
       "index":0, 
      "title":"Foo1", 
      "skus":"Fit:Regular,Size:6,Color:Coyote (120)", 
     }, 
     { 
      "index":1, 
      "title":"Foo2", 
      "skus":"Fit:Regular,Color:Coyote (120),Size:65", 
     }, 
     { 
      "index":2, 
      "title":"Foo3", 
      "skus":"Fit:Regular,Size:7,Color:Coyote (120)", 
     }, 
     { 
      "index":0, 
      "title":"Foo4", 
      "skus":"Color:Coyote (120),Fit:Regular,Size:7.5", 
      }, 
      { 
      "index":1, 
      "title":"Foo5", 
      "skus":"Fit:Slim,Size:8,Color:Coyote (120)", 
      }, 
     { 
      "index":2, 
      "title":"Foo6", 
      "skus":"Fit:Regular,Size:9,Color:Coyote (120)", 
     }, 
     { 
      "index":0, 
      "title":"Foo7", 
      "skus":"Fit:Regular,Size:8.5,Color:Coyote (120)", 
     }, 
     { 
      "index":1, 
      "title":"Foo8", 
      "skus":"Fit:Regular,Size:10,Color:Coyote (120)", 
    }, 
    { 
      "index":2, 
     "title":"Foo9", 
      "skus":"Fit:Slim,Color:Coyote (120),Size:13", 
    }, 
    { 
      "index":0, 
      "title":"Foo10", 
      "skus":"Fit:Regular,Size:8.5,Color:Coyote (120)", 
    }, 
    { 
      "index":1, 
      "title":"Foo11", 
      "skus":"Fit:Regular,Size:10,Color:Coyote (120)", 
    }, 
    { 
      "index":2, 
      "title":"Foo12", 
      "skus":"Fit:Regular,Color:Coyote (120),Size:13", 
    } 
     ] 

這是你的新功能:

function getSkuCombinations(obj, prodskuval) { 
     var combres = $.grep(obj, function (o) { //Will give you all the matches 
         return o.skus.split(',').sort().toString() == prodskuval.split(',').sort().toString(); 
       }); 
     return combres; 
} 

是必要的功能getSkuCombinations考慮這兩種情況下:

var mytestvalue="Fit:Regular,Color:Coyote (120)"; or 
var mytestvalue="Color:Coyote (120),Fit:Regular"; 
+0

這是行不通的,這時候我已經空在我的對象 – SoftwareNerd

+0

@SoftwareNerd我很樂意幫助你 – Jhonathan

1
var checkSKU = function (obj, testValue) { 
    var results = []; 
    obj.forEach(function (item) { 
     if (item.skus.indexOf(testValue) > -1) { 
      results.push(item); 
     } 
    }); 
    return results; 
}; 

的jsfiddle測試用例:http://jsfiddle.net/N9V9q/3/

+0

此函數返回的所有對象,我的意思是相同的對象再次 – SoftwareNerd

+0

要麼是你的問題更清晰或啓動upvoting。這解決了你提出的問題。 – SomeKittens

+0

有不同配合的物體,不應該如我指定 – SoftwareNerd