简体   繁体   中英

get the object matched with value provided in the json object using jquery?

I have a json object which looks like this and i have and random parameters for "skus" value in my json object

like

     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",
}
    ]

i wrote a function to get the matched combinations of skus with variable i have

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

i call this function like this

     var combinationresults=getSkuCombinations(myobj,mytestvalue)

when i do this i should get all the skus which have the combination "mytestvalue" which i passed but this function now only returns me

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

can any one help me in doing this

this function solved my problem,

     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;
         });
    }
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",
    }
      ]

This is you new function:

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;
}

Is necessary that function getSkuCombinations consider both case :

var mytestvalue="Fit:Regular,Color:Coyote (120)"; or
var mytestvalue="Color:Coyote (120),Fit:Regular";
var checkSKU = function (obj, testValue) {
    var results = [];
    obj.forEach(function (item) {
        if (item.skus.indexOf(testValue) > -1) {
            results.push(item);
        }
    });
    return results;
};

JSFiddle test case: http://jsfiddle.net/N9V9q/3/

Try this :

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

Tested it with Node.js. If you change SKUOptions (dunno waht that is) to skus (attribute of the object in the myobj JSON), then it works:

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);

Returns:

[ { 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 (look for console.log) : http://jsfiddle.net/Saran/Y8wwE/

This is the method which solved my problem

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;
     });
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM