我正在进行Api通话,以便接收有关我跟随的用户的一些数据。 目前我收到类似[[{obj1},{obj2}],[{obj3}]]的内容,我想要这样的东西[{obj1},{obj2},{obj3}]。因为一个用户可以拥有多个对象。
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 :(得分:2)
您可以使用ES6 Spread
var data = [["one", "two"],["three"],["four","five"]];
result = [].concat(...data);
console.log(result);

ES5中的替代方案,您可以使用reduce:
var data = [["one", "two"],["three"],["four","five"]];
var result = data.reduce(function(prev,curv){
return prev.concat(curv)
}, []);
console.log(result);

答案 1 :(得分:0)
编辑 我不太确定这是问题所在,但这是我的解释
所以你想扁平化阵列?让我们首先构建一个函数,该函数采用嵌套数组并将其展平为单个级别,如下所示:
function flatten(arr){
var result = [];
arr.forEach(element => (
result = result.concat(element);
));
return result;
}
现在,如果我们有一个3D数组,如[[["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"]])
有效。