我可以分配2个让入循环吗?我尝试了此操作,但警告了k[ts] ')' expected.
:
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,
});
}
正确的语法是什么?
答案 0 :(得分:3)
假设两个对象具有相同数量的键,为了一次遍历两个对象,您必须首先构造一个包含键对的某种对象。但是,从您的代码来看,您似乎只对键的 value 感兴趣,而不对键本身感兴趣–如果您想要的是清晰的短代码,则可以使用数组方法:遍历Object.values
的{{1}},并使用索引访问app.date
内部的适当值:
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
进行迭代:
for..of
或者,使用 plain for循环可能更清楚:
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
}
但是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
更合适:
push
如果可能的话,我建议更改您的数据结构,以使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
的每一项都彼此明确关联,例如数组,而不是依赖于每个对象碰巧具有相同的有序属性名称。尽管现代浏览器保证了属性顺序 ,但是依赖代码并不是一件好事。