javascript - 如何在for循环中执行多个let

标签 javascript ecmascript-6

我可以在 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.dateObject.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
});

如果可能的话,我建议更改您的数据结构,以便 datedate2 中的每一项都明确地彼此关联,例如数组,而不是依赖于每个对象碰巧具有相同的有序属性名称。尽管在现代浏览器中可以保证属性顺序,但代码依赖它并不是一件好事。

关于javascript - 如何在for循环中执行多个let,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53901941/

相关文章:

javascript - 如何使用 Javascript ES6 ES2015 模块将常量直接导出/导入到导入模块命名空间?

javascript - 为什么 ISN'T `foo: ' bar'` 是 Javascript 中的语法错误?

javascript - 带有 ES6 类的 AngularJS 1.4,这是 null

javascript - $(() => {}) 是 ES6 中的 jQuery 匿名函数或就绪函数吗?

javascript - jquery 第二次事件没有响应

javascript - 水平滚动溢出

javascript - 在鼠标悬停/输入时将图像 src 和位置设置为鼠标

javascript - 有没有办法通过变量访问 es6 常量?

javascript - Angular 应用程序 : es2020 migration from es2015

javascript - 在 JavaScript 中从字符串的开头到结尾删除 HTML 内容组