2016-04-20 14 views
0

Ich habe eine Zeichenfolge, die ich innerhalb eines JSON-Objekts suchen muss und eine bestimmte Hash-Nummer von diesem gefundenen Wert zurückgeben. Ich habe es ohne Unterstreichung funktionieren lassen, aber es ist schlecht optimiert. Was ich tun muss, ist die Schleife zu stoppen, sobald die fileToSearch Zeichenfolge gefunden wird.Unterstreichung verwenden, um einen Wert nach Schlüssel zu finden

Zum Beispiel habe ich ein JSON-Objekt hier:

var json = { 
    "images/mike.jpg" : "images/mike.12345.jpg", 
    "images/joe.jpg" : "images/joe.axcvas.jpg", 
    "images/mary.jpg" : "images/mary.mndfkndf.jpg", 
    "images/jane.jpg" : "images/jane.dfad34.jpg", 
    }; 

Und ich habe eine Variable fileToSearch, die ich brauche in der obigen Aufgabe zu suchen.

var fileToSearch = "joe.jpg"; 

Was ist der Hash-Wert in images/joe.axcvas.jpg, so axcvas erhalten ausgegeben sollte.

Ohne Strich:

var hash; 

    for (var key in json) { 
    var index = key.indexOf(fileToSearch); 
    if (index !== -1) { 
     hash = json[key].split('.')[1]; 
    } 
    } 
    console.log(hash); //axcvas 

Wie kann ich optimieren/diese mit Unders erreichen?

+0

Heck, Sie brauchen nicht einmal 'Filter'. Wirf einfach eine Pause ein, nachdem du deinen Hash gefunden hast und er ist schon ziemlich optimal. – Hamms

Antwort

2

Sie finden _.findKey in einer solchen Art und Weise verwenden können:

var key = _.findKey(json, function(value, key) { 
    return key.indexOf(fileToSearch) >= 0; 
}); 
var hash = key? json[key].split('.')[1] : undefined; 

Beachten Sie, dass diese Methode seit v1.8.0 verfügbar ist.

+0

Konnte das nicht funktionieren. https://jsfiddle.net/zg7gs09j/1/ – cusejuice

+0

@cusejuice Korrigiert. Siehe aktualisierte Antwort. – hindmost

0

Sie können die Schleife brechen, wenn Sie das Element

var hash; 

for (var key in json) { 
    var index = key.indexOf(fileToSearch); 
    if (index !== -1) { 
     hash = json[key].split('.')[1]; 
     break; 
    } 
} 
console.log(hash); 
Verwandte Themen