2017-03-28 103 views
-1

我正在做一個Api調用來接收一些關於我關注的用戶的數據。 而目前我收到類似[[obj1},{obj2}],[{obj3}]]的東西,我想要這樣的[{obj1},{obj2},{obj3}]。因爲一個用戶可以有多個對象。數組節點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

如果一個用戶可以擁有多個對象,則你想要的格式將無法表示它。 – Bernard

+0

什麼是「*'allData.map(函數(值){ 返回值 })'*」應該做什麼? – Bergi

+0

你想**平坦**數組。谷歌那。 –

回答

2

你可以使用ES6 Spread

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

替代在ES5你可以使用減少:

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

 
console.log(result);

0

編輯我不太肯定這是問題是問什麼,但是這是我的解釋

所以,你要變平的陣列?讓我們先建立一個函數,它接受一個嵌套的數組和變平出來一個級別,就像這樣:

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

現在,如果我們有一個三維陣列,像[[["hi"]]]。然後,我們需要多次扁平化。事實上,我們可以遞歸地做到這一點。

每一次,我們都可以檢查它是否是一個使用Array.isArray()的數組,如果是,請在追加之前將其平坦化。我們可以遞歸編程。

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

這就是我們的最終答案。通過第二個函數,我們可以看到flatten(["hi", ["there"]])有效。

+0

我的意思是我現在有這樣的[[「一」,「兩」],[「三」]],我想這[[一個],「兩」,「三」] –

+0

是的,那麼這個答案是爲你 :) – Max