Ich versuche, eingebettete Arrays durchlaufen, bis ich ein Element finden, dessen data
Eigenschaft mit meiner Eingabe entspricht.Verwenden Sie find() auf eingebetteten Arrays mit jQuery.
Das folgende Beispiel sollte eine Warnung ausgeben Niederlande. Wenn Sie stattdessen ein Element im ersten Array verwenden, erhalten Sie undefined
, und wenn Sie eines aus der zweiten auswählen, erhalten Sie ein Objekt.
var countries = {
"EU": [
{value: 'Malta', data: 'MT'},
{value: 'Netherlands', data: 'NL'},
{value: 'Austria', data: 'AT'},
{value: 'Italy', data: 'IT'}
],
"other": [
{value: 'Bosnia and Herz.', data: 'BA'},
{value: 'Jersey', data: 'JE'},
{value: 'Belarus', data: 'BY'}
]
};
function findCountry(code) {
$.each(countries, function(key, arr) {
val = arr.find(function(obj) {
return obj.data == code;
});
});
return val;
}
alert(findCountry('NL'));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
So denke ich, dass, selbst wenn das Element in der ersten Array gefunden wird, hält die each
läuft. Wahrscheinlich wird stattdessen eine return-Anweisung benötigt. Aber selbst dann
var countries = {
"EU": [
{value: 'Malta', data: 'MT'},
{value: 'Netherlands', data: 'NL'},
{value: 'Austria', data: 'AT'},
{value: 'Italy', data: 'IT'}
],
"other": [
{value: 'Bosnia and Herz.', data: 'BA'},
{value: 'Jersey', data: 'JE'},
{value: 'Belarus', data: 'BY'}
]
};
function findCountry(code) {
$.each(countries, function(key, arr) {
return arr.find(function(obj) {
return obj.data == code;
});
});
}
alert(findCountry('BA'));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Aber das gibt undefined
die ganze Zeit. Also was fehlt mir?
Das Problem ist, dass 'findCountry()' keine Rückkehr hat, so ist es 'undefined' – doublesharp
Wenn Sie das Land (und nicht die "Region") suchen nach oben sollten Sie strukturieren Ihr Objekt mit dem Ländernamen als Schlüssel und der Region als eine Eigenschaft des Unterobjekts. Dann überprüfe einfach 'if (countries [' Malta ']) '', anstatt die Eigenschaften des gesamten Objekts zu durchsuchen. – James
@James Ich wünschte, ich könnte die Struktur ändern, leider verwende ich ein Plugin, das diese spezifische Struktur benötigt. –