我可以在 for 循环中分配 2 个 let 吗?我尝试了这个,但给了我预期的警告 k[ts] ')'。
:
for(let key in app.date let key2 in app.date2) {
data_series.push({
"year": app.date[key]._id,
"italy": app.date[key].count,
"germany": app.date2[key2].count2,
});
}
正确的语法是什么?
最佳答案
假设两个对象具有相同数量的键,为了同时迭代这两个对象,您必须首先构造一个包含键对的某种对象。但是,从您的代码来看,您似乎只对该键的值感兴趣,而不是键本身 - 如果您想要的是清晰、简短的代码,您可以使用数组方法:迭代app.date
的Object.values
,并使用索引访问date2
内的适当值:
const date2Values = Object.values(app.date2);
Object.values(app.date).forEach(({ _id, count }, i) => {
data_series.push({
year: _id,
italy: count,
germany: date2Values[i].count2
});
});
如果您必须使用for
,则预先构造一个 key 对对象,并使用for..of
进行迭代:
const date2Keys = Object.keys(app.date2);
const allKeys = Object.keys(app.date)
.map((key, i) => ({ key, key2: date2Keys[i] }));
for (const { key, key2 } of allKeys) {
// etc
}
或者,使用普通 for 循环可能会更清晰:
const dateKeys = Object.keys(app.date);
const date2Keys = Object.keys(app.date2);
for (let i = 0, { length } + Object.keys(app.date); i < length; i++) {
const key = dateKeys[i];
const key2 = date2Keys[i];
// etc
}
但是 Object.values
版本可能更可取,因为它更抽象、更实用,并且不需要手动迭代。
此外,如果 data_series
事先是一个空数组,那么使用 .map
比使用 forEach
和 更合适>推
:
const date2Values = Object.values(app.date2);
const data_series = Object.values(app.date).map(({ _id, count }, i) => ({
year: _id,
italy: count,
germany: date2Values[i].count2
});
如果可能的话,我建议更改您的数据结构,以便 date
和 date2
中的每一项都明确地彼此关联,例如数组,而不是依赖于每个对象碰巧具有相同的有序属性名称。尽管在现代浏览器中可以保证属性顺序,但代码依赖它并不是一件好事。
关于javascript - 如何在for循环中执行多个let,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53901941/