2016-05-18 11 views
1

Neuabstimmung Ich habe ein Array (JSON-Objekte):Concat zwei Arrays Kreis js

result = [[{object},{object}], [{object}], [{object},{object},{object}]] 

Und ich versuche es zu einem einzigen Array von Objekten zu erhalten:

array = [{object},{object},{object}],{object},{object},{object}] 

jedoch unabhängig davon, welche Methode Ich versuche ich etwas wie aus console.log (Array) ausgegeben wird:

[{object}, [circular], {object}, [circular], [circular] etc 

Ich habe keine Ahnung, was kreisförmige wie dies ist?

var array = []; 

    for (var i=0; i<result.length;i++) { 
     array = array.concat(result[i]); 
    } 

oder:

for (var i=0; i<result.length;i++) { 
      var res = result[i]; 
      for (var x=0; x<res.length; x++){ 
       array.push(res[x]); 
      } 
     } 
+0

was diese kreisförmige Ding verwendet? Woher kommen diese Stämme? –

+0

Können Sie Beispiele geben, was genau die Objekte sind? [Ich habe Ihren Code getestet] (https://jsfiddle.net/yguuuxvp/) und es funktioniert gut für mich solange es immer ein Array von Arrays ist. –

Antwort

1

Wenn die anfängliche Array nur 2 Ebenen enthält als Beispiel (keine Elemente in Arrays sind Arrays), thi s funktionieren würde:

var array = result.reduce(function(a,b){ 
    return a.concat(b); 
}); 

mit reduzieren und concat funktioniert der Trick, um alle Elemente in einem einzigen Array zurück.

+1

Viele gute Antworten, aber einfach und effektiv. Vielen Dank. – user1212520

0

Wenn ich Ihre Frage richtig verstehen, müssen Sie etwas wie folgt aus:

var arrays = [[{a:1},{b: 2}], [{c:3}], [{d: 4},{e: 5},{f: 6}]]; 
 

 
function flattenArray(arr, result) { 
 
    var res = result || []; 
 

 
    arr.forEach(function(item){ 
 
     if (Array.isArray(item)) { 
 
      flattenArray(item, res) 
 
     } else { 
 
      res.push(item) 
 
     } 
 
    }) 
 

 
    return res; 
 
} 
 

 
console.log(flattenArray(arrays))

2

Sie benötigen wahrscheinlich eine rekursive Funktion, die Elemente in einem Akkumulator verschiebt. Wenn es kein Array, es ist einfach schieben, sonst schieben seine Komponenten:

var isArray = function(someVar) { 
 
    return Object.prototype.toString.call(someVar) === '[object Array]'; 
 
}; 
 

 
var flattenArrayAux = function(arr, accum) { 
 
    for(var i = 0; i < arr.length; ++i) { 
 
    if(isArray(arr[i])) { 
 
     flattenArrayAux(arr[i], accum); 
 
    } 
 
    else { 
 
     accum.push(arr[i]); 
 
    } 
 
    } 
 
} 
 

 
var flattenArray = function(arr) { 
 
    var result = []; 
 
    flattenArrayAux(arr, result); 
 
    return result; 
 
} 
 

 
document.write(flattenArray([[1, 2, 3], 4, [[5, 6], [7, 8]]]))