我如何在javascript Object.assign方法中使用所有函数参数

时间:2019-01-27 18:17:08

标签: javascript node.js express

我正在使用nodejs创建服务器,并表示用户可以请求一些数据并服务器发送响应。但是,数据是数组,我想向用户发送json响应。因此,我使用了forEach()数组方法并使用了Object.assign(),以便获得对象。但是问题是我无法在回调函数中正确使用'value'参数时使用forEach()方法的'index'参数。当我只使用'index'参数时,我的代码可以正常运行,但是我想同时使用两个参数。

route.get('/getGPX/:number', passport.authenticate('jwt', { session: false }), (req, res) => {
    gpx.find({ username: req.user.username }, (err, result) => {
        if (err) console.log(err);
        if (result) {
            if (result.length === 0) {
                res.end();
                console.log('ended')
            }
            else {
                var jsonRes = {};
                result.forEach((value, index) => {

我可以从参数中使用“值”,但不能使用“索引”

                    jsonRes = Object.assign({ index: value.data }, jsonRes);
                })

                res.json({data: jsonRes});

            }
        }
    }) 

我什至尝试使用global var,但是即使它不起作用,我如何同时使用索引和值累加

3 个答案:

答案 0 :(得分:0)

Object.assign改变最左边的参数。它不会产生新对象。由于每次jsonRes将是最后一个结果时,您都要传递一个文字对象。

将jsonRes放在左侧,而不是-Object.assign(jsonRes, {index: value.data})

答案 1 :(得分:0)

您想要什么JSON结构?

如果您想要一个像这样的json:

{
  0: "my first value",
  1: "second"
}

您只是在索引周围错过了[],在这里您将'index'作为关键字而不是index的值。因此,您可以在每次迭代中覆盖索引键。

这是使用index值作为json中的键的代码。

jsonRes = Object.assign({[index]: value.data}, jsonRes)

有关更多示例的工作示例,请参见此处:https://repl.it/@Benoit_Vasseur/nodejs-playground

答案 2 :(得分:0)

您可能希望使用简单的reduce而不是forEachObject.assign

} else {
  var jsonRes = result.reduce((r, v, i) => {r[i] = v.data; return r}, {});
  res.json({data: jsonRes});
}