我正在尝试根据对数组中 db forEach 值的查询来更新数组“projects”。当我获取该值并将其分配给项目的当前索引时,它不会在实际数组上更新。
我已经尝试过一些解析拒绝 promise 结构、.map、.forEach、普通的 for 循环、查询内的回调,但这些都不起作用。
projects.forEach((project, i) => {
let query = squel
.select()
.field("s.Clave_Proyecto")
.field("s.Semana_Numero")
.field("s.Porcentaje_Semana")
.from("Semana", "s")
.where("s.Clave_Proyecto = ?", project["Clave_Proyecto"])
.toParam();
db.get().query(query.text, query.values, (error, weeks) => {
if(error) return res.status(400).send(error);
if(weeks) project["weeks"] = Object.values(JSON.stringify(weeks));
else project["weeks"] = ["No weeks available"];
projects[i] = project;
console.log(projects[i]);
});
});
它应该以数组形式返回使用新的“weeks”属性更新的项目实例。
最佳答案
每次循环都需要创建一个新的project
对象。否则,您将所有数组元素设置为引用同一对象,该对象每次都会被覆盖。
您可以使用Object.assign()
将全局对象
克隆到局部变量中。
db.get().query(query.text, query.values, (error, weeks) => {
if(error) return res.status(400).send(error);
let tempProject = Object.assign({}, object);
if(weeks) tempProject["weeks"] = Object.values(JSON.parse(weeks));
else tempProject["weeks"] = ["No weeks available"];
projects[i] = tempProject;
console.log(projects[i]);
});
关于javascript - 在查询内分配值并且它没有更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56676306/