2016-06-15 82 views
0

我有一個我想要搜索的模型列表,併爲正確的那個拉出url。我不會總是擁有完整的鑰匙,也不會擁有完整的價值,但永遠至少有一個獨特的部分。JavaScript/jQuery通過變量和返回值的部分匹配找到JSON鍵/值

現在,代碼僅處於測試模式,其中一組數字與鍵匹配,打印成功或失敗。

控制檯告訴我模型[i] .indexOf不是函數。我知道這是一個對象,但是當我對它做一個toString時,我會得到「object Object」。我不瞭解什麼?

我很高興與一個解決方案,是香草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" 
    }] 
} 
+1

我最初誤解了你的問題,請看我更新的答案! –

回答

1

模型[我]不是一個字符串,所以你會得到錯誤。如果你想檢查密鑰,然後在模型[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') 
      } 
     } 
    }});    

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

我希望幫助!