如何做多个让循环

时间:2018-12-23 07:27:44

标签: javascript ecmascript-6

我可以分配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,
        });
    }

正确的语法是什么?

1 个答案:

答案 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比使用.mapforEach更合适:

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的每一项都彼此明确关联,例如数组,而不是依赖于每个对象碰巧具有相同的有序属性名称。尽管现代浏览器保证了属性顺序 ,但是依赖代码并不是一件好事。