2017-07-07 3 views
0

Ich versuche, ein multidimensionales Array zu konkatulieren, so dass ich alle Daten iterieren und anzeigen kann. Es gibt einen sehr guten Beitrag zum Zugriff auf verschachtelte Daten here, aber ich suche nach einer Lösung, die mit einer bestimmten Datenstruktur arbeitet.Javascript Concat Multidimensional Array

Hier sind meine Daten:

var data = { 
"Nike": [ 
    { 
    "id": "1", 
    "name": "test", 
    "myimage": "image.gif"}, 

    { 
    "id": "2", 
    "name": "test", 
    "myimage": "image.gif"} 
], 

"Adidas": [ 
    { 
    "id": "3", 
    "name": "Football Boots", 
    "myimage": "image.gif"}, 

    { 
    "id": "4", 
    "name": "Running Shoes", 
    "myimage": "image.gif"} 
]} 

Ich scheine die Werte aus dem Nike-Array erhalten zu können, wenn ich dies tun:

var result = data.Adidas; 


for (var i = 0; i < result.length; i++) { 
var object = result[i]; 
for (property in object) { 
    var value = object[property]; 
    alert(property + "=" + value + "<br>"); 
} 
} 

aber ich in der Lage sein möchte, angezeigt werden alle Array-Elemente (ID 1-4).

Was ich versucht habe zu tun ist:

var result = [].concat.apply([], data); 

... und Schleife über die Ergebnisgröße die gleiche for-Schleife, aber es funktioniert nicht.

Mein ideales Endergebnis wäre, die vier Produkte unter jedem Markennamen anzuzeigen. Ich brauche nicht den eigentlichen Markennamen selbst zu zeigen. Zum Beispiel:

"id": "1", 
    "name": "test", 
    "myimage": "image.gif" 

"id": "2", 
    "name": "test", 
    "myimage": "image.gif" 

"id": "3", 
    "name": "Football Boots", 
    "myimage": "image.gif", 

"id": "4", 
    "name": "Running Shoes", 
    "myimage": "image.gif" 

Jede Hilfe wird geschätzt.

Prost

+0

Mögliches Duplikat von [Access/Prozess (verschachtelte) Objekte, Arrays oder JSON] (https://stackoverflow.com/questions/11922383/access-process-nested-objects-arrays-or-json) – Liam

Antwort

2

Sie reduce und iterieren die Schlüssel des Objekts verwenden können, dann ist Ihr Array erstellen:

var mashed = Object.keys(data).reduce(function(arr, key) { 
    return arr.concat(data[key]); 
}, []); 

Demo: https://jsfiddle.net/kvd6egn5/

+0

Perfekt !! Genau das, wonach ich suche. Vielen Dank – Hexana

1

Eine Alternative wäre eine for in Schleife zu reduzieren :

let res = []; 
for (let key in data) res = res.concat(data[key]); 
console.log(res);