2017-12-14 3 views
1

Ich habe ein Objekt wie so bekommt ...Erste Daten aus verschachteltem JSON-Array

var oInfoModal = "{"modals":[{"myID":17,"warningIdx":[0]},{"myID":12,"warningIdx":[1,2]},{"myID":11,"warningIdx":[3]},{"myID":10,"warningIdx":[4]},{"myID":9,"warningIdx":[5,6,7]},{"myID":8,"warningIdx":[8]},{"myID":7,"warningIdx":[9,10]},{"myID":6,"warningIdx":[11,12]},{"myID":5,"warningIdx":[13,14]},{"myID":4,"warningIdx":[15,16]},{"myID":3,"warningIdx":[17]},{"myID":1,"warningIdx":[18,19]},{"myID":0,"warningIdx":[20,21]}]}"; 

Ich mag das Objekt filtern basierend auf einem warnIdx Wert auf eine Funktion übergeben, aber ich bin immer leer Objekt als Ergebnis. Ich weiß, dass das Problem darin liegt, dass oInfoModal.modals.warningIdx selbst ein Array ist. Aber ich bin mir nicht sicher, wie man das gefilterte oInfoModal.modals-Objekt zurückgibt.

function filterInfoModals(warnIdx) { 
    return oInfoModal.modals.filter(function (item) { 
    return item.warningIdx == warnIdx; 
    }); 
} 

Ich habe auch versucht

function filterInfoModals(warnIdx) { 
    return oInfoModal.modals.filter(function (item) { 
     return item.warningIdx.filter(function (idx,val) { 
      return val.warningIdx == warnIdx; 
     }); 
    }); 
} 

die mir die ursprüngliche, ungefilterte, Objekt zurückgibt.

Jetzt nur im Kreis. Jede Führung wäre willkommen!

+2

Haben Sie versucht, Rückkehr item.warningIdx.indexOf (warnIdx)> -1' für Ihr erstes Beispiel? – abagshaw

+0

Das hat den Trick gemacht. Funktion filterInfoModals (warnIdx) { Rückgabe oInfoModal.modals.filter (Funktion (Element) { \t Rückgabe item.warningIdx.indexOf (warnIdx)> -1; }); } –

+1

Setzen Sie dieses oInfoModal auch auf diese 'Zeichenfolge' in Ihrem Code? Sie müssen in einfache Anführungszeichen eingeschlossen werden, wenn Sie doppelte Anführungszeichen verwenden, um Felder und Werte anzugeben ... und wenn oInfoModal eine Zeichenfolge ist, müssen Sie JSON.parse() in ein tatsächliches Objekt einfügen. –

Antwort

2

Sie haben kein gültiges Objekt. Sie haben es in Anführungszeichen eingeschlossen, also ist es eine Zeichenfolge. Daher wird Ihr Filter nicht ordnungsgemäß funktionieren. Es gibt auch andere Syntaxfehler in Ihrem Objekt, die verhindern, dass es ordnungsgemäß funktioniert. Hier ist die vollständige Lösung:

var oInfoModal = { 
    "modals": [ 
    { "myID": 17, "warningIdx": [0] }, 
    { "myID": 12, "warningIdx": [1, 2] }, 
    { "myID": 11, "warningIdx": [3] }, 
    { "myID": 10, "warningIdx": [4] }, 
    { "myID": 9, "warningIdx": [5, 6, 7] }, 
    { "myID": 8, "warningIdx": [8] }, 
    { "myID": 7, "warningIdx": [9, 10] }, 
    { "myID": 6, "warningIdx": [11, 12] }, 
    { "myID": 5, "warningIdx": [13, 14] }, 
    { "myID": 4, "warningIdx": [15, 16] }, 
    { "myID": 3, "warningIdx": [17] }, 
    { "myID": 1, "warningIdx": [18, 19] }, 
    { "myID": 0, "warningIdx": [20, 21] } 
    ] 
}; 

function filterInfoModals(warnIdx) { 
    return oInfoModal.modals.filter(function (item) { 
    return item.warningIdx.indexOf(warnIdx) > -1; 
    }); 
} 
console.log(filterInfoModals(1,2)); 
+0

Entschuldigung. Es wird tatsächlich automatisch von meinem Code generiert. Ich habe es nicht richtig kopiert. Danke für deine Hilfe. –

+0

@ChrisG. Siehe oben für die endgültige Lösung. –

Verwandte Themen