2017-03-09 5 views
-1

Zunächst einmal könnte diese Frage schon mehrmals gestellt worden sein, aber jeder Thread, den ich gefunden habe, hat mir nicht geholfen. Ich würde mich freuen, wenn ich meine Funktion unten umschreiben könnte.iterieren durch JSON-Array ohne einen Schlüssel

Ich habe das folgende Array mit Json-Objekten.

Ziel ist es, die "URL" -Werte zu erhalten. Im Moment bekomme ich jeden Wert von diesem Array.

a = [{ 
 
    "result": [{ 
 
     "name": [ 
 
     "name" 
 
     ], 
 
     "url": [ 
 
     "www.bar.com" 
 
     ] 
 
    }, 
 
    { 
 
     "name": [ 
 
     "name 2" 
 
     ], 
 
     "url": [ 
 
     "www.bar.org" 
 
     ] 
 
    }, 
 
    { 
 
     "name": [ 
 
     "name 1" 
 
     ], 
 
     "url": [ 
 
     "www.bar.biz" 
 
     ] 
 
    }, 
 
    { 
 
     "name": [ 
 
     "name 3" 
 
     ], 
 
     "url": [ 
 
     "www.bar.jp" 
 
     ] 
 
    } 
 
    ] 
 
}]; 
 
document.getElementById("foo").innerHTML = "How to explicitly get the url value?'"; 
 
loopThrough(a); 
 

 
function loopThrough(obj) { 
 
    for (var key in obj) { 
 
    // skip loop if the property is from prototype 
 
    if (!obj.hasOwnProperty(key)) continue; 
 

 
    if (typeof obj[key] !== 'object') { 
 
     console.log(obj[key]); 
 
    } else { 
 
     loopThrough(obj[key]); 
 
    } 
 
    } 
 
}
<div id="foo"> 
 
</div>

Wie würde ich Zugriff auf jedes "url" Element in diesem Array?

Vielleicht gibt es auch eine intelligentere Lösung als diese.

Vielen Dank im Voraus.

Antwort

2

a = [{ 
 
    "result": [{ 
 
     "name": [ 
 
     "name" 
 
     ], 
 
     "url": [ 
 
     "www.bar.com" 
 
     ] 
 
    }, 
 
    { 
 
     "name": [ 
 
     "name 2" 
 
     ], 
 
     "url": [ 
 
     "www.bar.org" 
 
     ] 
 
    }, 
 
    { 
 
     "name": [ 
 
     "name 1" 
 
     ], 
 
     "url": [ 
 
     "www.bar.biz" 
 
     ] 
 
    }, 
 
    { 
 
     "name": [ 
 
     "name 3" 
 
     ], 
 
     "url": [ 
 
     "www.bar.jp" 
 
     ] 
 
    } 
 
    ] 
 
}]; 
 
loopThrough(a); 
 

 
// Uses ES6 syntax 
 
function loopThrough(obj) { 
 
    obj[0].result.forEach(r => console.log(r.url[0])); 
 
}

+0

Thank you very much. Ich war 3 Tage mit dieser Sache fest !!! – AppRoyale

+0

@AppRoyale Wenn dies eine korrekte Antwort ist, dann ist das Häkchen als solches. Vielen Dank! –

1

versuchen Sie es selbst.

var a = [{ 
 
    "result": [{ 
 
     "name": [ 
 
     "name" 
 
     ], 
 
     "url": [ 
 
     "www.bar.com" 
 
     ] 
 
    }, 
 
    { 
 
     "name": [ 
 
     "name 2" 
 
     ], 
 
     "url": [ 
 
     "www.bar.org" 
 
     ] 
 
    }, 
 
    { 
 
     "name": [ 
 
     "name 1" 
 
     ], 
 
     "url": [ 
 
     "www.bar.biz" 
 
     ] 
 
    }, 
 
    { 
 
     "name": [ 
 
     "name 3" 
 
     ], 
 
     "url": [ 
 
     "www.bar.jp" 
 
     ] 
 
    } 
 
    ] 
 
}]; 
 

 
var urls=a[0].result.reduce(function(urls,it){ 
 
    return urls.concat(it.url); 
 
},[]); 
 
console.log(urls);

+0

Ihre Antwort wird 2 Mal auf dem Array iterieren. Das ist ein bisschen zu viel für was OP fragt – Weedoze

+0

@Weedoze ich nur um den Code klarer zu machen. –

+0

Ich glaube nicht, dass die Verwendung von 'reduce' und' map' in diesem Fall den Code klarer macht. Aber das ist m Sicht – Weedoze

Verwandte Themen