2016-06-15 5 views
0

Ich habe eine Liste von Modellen, die ich durchsuchen möchte und ziehen Sie die URL für die richtige. Ich werde nicht immer den vollen Schlüssel haben, und niemals den vollen Wert, sondern werde immer mindestens einen einzigartigen Teil davon haben.JavaScript/jQuery finde JSON-Schlüssel/Wert mit partieller Übereinstimmung von Variable und Rückgabewert

Derzeit befindet sich der Code nur im Testmodus, mit einer festgelegten Nummer, die mit einem Schlüssel übereinstimmt, einen Erfolg oder Fehler drucken.

Die Konsole sagt mir, dass Modelle [i] .indexOf keine Funktion ist. Ich weiß, dass es ein Objekt ist, aber wenn ich eine toString darauf mache, bekomme ich "object Object". Was verstehe ich nicht?

Ich bin glücklich mit einer Lösung, die entweder JavaScript ist oder jQuery verwendet.

Der Code:

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

Die JSON (teilweise):

{ 
    "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

Ich habe ursprünglich Ihre Frage missverstanden, bitte sehen Sie meine aktualisierte Antwort! –

Antwort

1

models [i] ist keine Zeichenfolge, daher erhalten Sie einen Fehler. Wenn Sie den Schlüssel überprüfen möchten, verwenden Sie die Funktion .each() bei Modellen [i]. In dieser Schleife vergleichen Sie den Schlüssel mit der indexOf-Funktion.

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

Sie müssten den Wert des Schlüssels greifen models[i].indexOf(model_code)-Object.keys(models[i])[0].indexOf(partial_model_code) ändern. Hier ist es in Aktion:

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)

Ich hoffe, das hilft!

Verwandte Themen