2017-03-28 78 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