JavaScript / jQuery通过变量和返回值的部分匹配来查找JSON键/值

时间:2016-06-15 17:34:06

标签: javascript jquery json

我有一个我想要搜索的模型列表,并提取正确的网址。我不会总是拥有完整的密钥,也不会拥有完整的价值,但总是至少有一个独特的部分。

现在代码处于测试模式,设置的数字与密钥匹配,打印成功或失败。

控制台一直告诉我,models [i] .indexOf不是一个函数。我知道它是一个对象,但是当我对它进行toString时,我得到了“对象对象”。我不理解的是什么?

我对使用vanilla JavaScript或使用jQuery的解决方案感到满意。

代码:

if ($('.mobile_tutorial').length) {
    var device = /*$device.model*/ "NTZEZ717VLU", model_code = device.substr(2).substr(0,device.length-3);
    $.ajax({
        url: "/scripts/phone_models.json",
        type: 'get',
        dataType: 'json',
        success: function (data) {
            var models = data.Manufacturer;
            for (var i = models.length - 1; i >= 0; i--) {
                if (models[i].indexOf(model_code) > -1) {
                    console.log(models[i])
                } else {
                    console.log('no match')
                }
            }
        }
    });
}

JSON(部分):

{
    "Manufacturer": [{
        "ZEZ955L": "http://x.com/mobile/home.seam?custId=ZEZ955L"
    }, {
        "ZEZ990G": "http://x.com/mobile/home.seam?custId=ZEZ990G"
    }, {
        "ZEZ828TL": "http://x.com/mobile/home.seam?custId=ZEZ828TL"
    }, {
        "ZEZ716BL": "http://x.com/mobile/home.seam?custId=ZEZ716BL"
    }, {
        "ZEZ717VL": "http://x.com/mobile/home.seam?custId=ZEZ717VL"
    }, {
        "ZEZ962BL": "http://x.com/mobile/home.seam?custId=ZEZ962BL"
    }, {
        "ZEZ963VL": "http://x.com/mobile/home.seam?custId=ZEZ963VL"
    }]
}

2 个答案:

答案 0 :(得分:1)

您需要获取将models[i].indexOf(model_code)更改为Object.keys(models[i])[0].indexOf(partial_model_code)的密钥值。这就是它的实际效果:



var partial_model_code = '3VL'

function ajax(data) {
  var models = data.Manufacturer;
  for (var i = models.length - 1; i >= 0; i--) {
    
    // grab the keys in the object
    // since there will only be one object grab the first one
    // check if the key partially matches
    if (Object.keys(models[i])[0].indexOf(partial_model_code) > -1) {
      console.log(models[i])
    } else {
      console.log('no match')
    }
  }
}


var data = JSON.parse(`{
    "Manufacturer": [{
            "ZEZ955L": "http://x.com/mobile/home.seam?custId=ZEZ955L"
        }, {
            "ZEZ990G": "http://x.com/mobile/home.seam?custId=ZEZ990G"
        }, {
            "ZEZ828TL": "http://x.com/mobile/home.seam?custId=ZEZ828TL"
        }, {
            "ZEZ716BL": "http://x.com/mobile/home.seam?custId=ZEZ716BL"
        }, {
            "ZEZ717VL": "http://x.com/mobile/home.seam?custId=ZEZ717VL"
        }, {
            "ZEZ962BL": "http://x.com/mobile/home.seam?custId=ZEZ962BL"
        }, {
            "ZEZ963VL": "http://x.com/mobile/home.seam?custId=ZEZ963VL"
    }]
}`)

ajax(data)




我希望有所帮助!

答案 1 :(得分:1)

models [i]不是字符串,因此您会收到错误。如果要检查密钥,请在模型[i]上使用.each()函数。因为每个循环使用indexOf函数比较密钥。

if ($('.mobile_tutorial').length) {
var device = /*$device.model*/ "NTZEZ717VLU", model_code = device.substr(2).substr(0,device.length-3);
    $.ajax({
    url: "/scripts/phone_models.json",
    type: 'get',
    dataType: 'json',
    success: function (data) {
        var models = data.Manufacturer;
        for (var i = models.length - 1; i >= 0; i--) {


 $.each(models[i], function( key, value ) {
  if (key.indexOf(model_code) > -1)               {
                           console.log(models[i])
            } else {
                console.log('no match')
            }
        }
    }});               

});
}