数组节点js的数组

时间:2017-03-28 16:12:30

标签: javascript arrays

我正在进行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);
            });
        }
  });
};

2 个答案:

答案 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"]])有效。