2017-03-28 2 views
-1

Ich mache einen Api-Anruf, um einige Daten über die Benutzer zu erhalten, denen ich folge. Und für den Moment erhalte ich etwas wie [[{Obj1}, {Obj2}], [{Obj3}]] und ich möchte so etwas [{Obj1}, {Obj2}, {Obj3}]. Weil ein Benutzer mehr als ein Objekt haben kann.Array Array-Knoten js

getDashboard = function (req, res) { 
    User.findById(req.params.id, function (err, user) { 
     if (!user) { 
      res.send(404, 'User not found'); 
     } 
     else { 
      var a = user.following; 
      var promises = a.map(function(current_value) { 
      return new Promise(function(resolve, reject) { 
      Receta.find({"user_id":current_value._id}, function (err, recetas) { 
      if(!err) {    
        resolve(recetas); 
      } else { 
        reject(err); 
        } 
      }); 
      }); 
      }); 

      Promise.all(promises).then(function(allData) { 
       var proms = allData.map(function(value){ 
        return value 
        }); 
       res.send(proms); 
      }).catch(function(error) { 
       res.send(error); 
      }); 
     } 
    }); 
}; 
+0

Wenn ein Benutzer kann mehr als ein Objekt haben, die Format, das Sie wollen, wird nicht in der Lage sein, es darzustellen. – Bernard

+0

Was ist "*' allData.map (Funktion (Wert) { Rückgabewert }) '*" soll das tun? – Bergi

+0

Sie möchten das Array ** flattern **. Google das. –

Antwort

2

könnten Sie ES6 verwenden Spread

var data = [["one", "two"],["three"],["four","five"]]; 
 
result = [].concat(...data); 
 
console.log(result); 
 

Alternative in ES5 könnten Sie reduzieren:

var data = [["one", "two"],["three"],["four","five"]]; 
 
var result = data.reduce(function(prev,curv){ 
 
    return prev.concat(curv) 
 
}, []); 
 

 
console.log(result);

0

EDITIch bin mir nicht ganz sicher, das ist, was die Frage stellt, aber das war meine Interpretation

So möchten Sie ein Array verflachen? Lassen Sie uns zunächst eine Funktion erstellen, die eine verschachtelte Array nimmt und flacht sie eine einzige Ebene aus, etwa so:

function flatten(arr){ 
    var result = []; 
    arr.forEach(element => (
     result = result.concat(element); 
    )); 
    return result; 
} 

Nun, was passiert, wenn wir ein 3D-Array haben, wie [[["hi"]]]. Dann müssen wir es mehrfach abflachen. Tatsächlich können wir das rekursiv tun.

Jedes Mal können wir prüfen, ob es ein Array mit Array.isArray() ist, und wenn es ist, flattern Sie es vor dem Anhängen. Wir können das rekursiv programmieren.

function flatten(arr){ 
    var result = []; 
    arr.forEach(element => (
     result = result.concat(Array.isArray(element) ? flatten(element) : element) 
    )); 
    return result; 
} 

und das ist unsere endgültige Antwort. Mit dieser zweiten Funktion können wir sehen, dass flatten(["hi", ["there"]]) funktioniert.

+0

Ich meine jetzt habe ich so etwas [["Eins", "Zwei"], ["Drei"]] und ich will das ["Eins", "Zwei", "Drei"] –

+0

Ja, dann ist diese Antwort für dich :) – Max