首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用jquery获取与json对象中提供的值匹配的对象吗?

使用jquery获取与json对象中提供的值匹配的对象吗?
EN

Stack Overflow用户
提问于 2013-10-24 15:17:41
回答 5查看 125关注 0票数 0

我有一个json对象,它看起来像这样,并且我在json对象中有“sku”值的随机参数。

喜欢

代码语言:javascript
复制
     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",
}
    ]

我编写了一个函数来获得带有变量的skus的匹配组合。

代码语言:javascript
复制
   function getSkuCombinations(obj,prodskuval) {
     var combres = $.grep(obj, function (o) { //Will give you all the matches
            return o.SKUOptions.indexOf(prodskuval) > -1;
     });
     return combres;
}

我把这个函数叫做这样

代码语言:javascript
复制
     var combinationresults=getSkuCombinations(myobj,mytestvalue)

当我这样做的时候,我应该得到所有的skus,它们有我传递的组合"mytestvalue“,但是这个函数现在只返回我。

代码语言:javascript
复制
       var myresult= [{
                "index":1,
                "title":"Foo2",
                "skus":"Fit:Regular,Color:Coyote (120),Size:65",
                  }]

有人能帮我做这个吗?

这个函数解决了我的问题,

代码语言:javascript
复制
     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;
         });
    }
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-10-24 18:50:45

这就是解决我问题的方法。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2013-10-24 16:09:08

代码语言:javascript
复制
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",
    }
      ]

这是你的新功能:

代码语言:javascript
复制
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考虑这两种情况是必要的:

代码语言:javascript
复制
var mytestvalue="Fit:Regular,Color:Coyote (120)"; or
var mytestvalue="Color:Coyote (120),Fit:Regular";
票数 1
EN

Stack Overflow用户

发布于 2013-10-24 18:15:23

代码语言:javascript
复制
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/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19569925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档