我在节点js中有两个并行的mysql查询(为了更快地获取数据),这是从mysql数据库读取并将结果放入javascript对象的javascript代码:
async.parallel({
aaChannelsCount: function(cb) {
/* GET - channels */
pool.query("SELECT JSON_LENGTH(sort) AS channels FROM channels WHERE bouquet='[\"?\"]'",[rows[0].bouquet], function (err, rows, fields) {
/* CHANNELS - count */
if (rows.length) {
data.push( {"channels": rows[0].channels, "radio": 0} );
};
});
},
aaVideoClub: function(cb) {
/* GET - videoclub */
pool.query("SELECT count(id) AS videoclub FROM vod", function (err, rows, fields) {
/* VIDEOCLUB - count */
data.push( {"videoclub": rows[0].videoclub} );
res.json(data);
});
}
}, function(err, results) {
if (err) {
/* SHOW - unauthorized */
res.sendStatus(401);
} else {
res.json(data);
}
}
);
我正在使用res.json(data)输出:
[{"channels":3,"radio":0},{"videoclub":2}]
需要获得此输出:
{"channels":3,"radio":0, "videoclub":2}
我在代码data.push中使用将mysql的结果添加到js数组对象中然后将其转换为json。但是我无法获得所需的结果。
答案 0 :(得分:1)
您可以使用Object.assign
和spread syntax ...
将数组转换为参数。
var array = [{ channels: 3, radio: 0 }, { videoclub: 2 }],
object = Object.assign(...array);
console.log(object);

另一个解决方案是,只需要获取一个对象并直接分配属性,而不是
if (rows.length) {
data.push( {"channels": rows[0].channels, "radio": 0} );
}
使用对象并直接分配
var object = {};
if (rows.length) {
object.channels = rows[0].channels;
object.radio = 0;
}
等等。
BTW,在块语句{ ... }
之后,不需要分号。
答案 1 :(得分:1)
你可以使用
来做
let arr = [{"channels":3,"radio":0},{"videoclub":2}];
let result = {};
for(let element of arr){
for(property in element){
result[property] = element[property];
}
}
console.log(result);