Как сделать множественный впуск для цикла - PullRequest
0 голосов
/ 23 декабря 2018

Могу ли я назначить 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 голосов
/ 23 декабря 2018

Предполагая, что оба объекта имеют одинаковое количество ключей, для того, чтобы перебрать оба, вы должны сначала создать объект некоторого вида, который содержит пары ключей.Но из вашего кода похоже, что вас интересует только значение для этого ключа, а не сам ключ - если вам нужен чистый, короткий код, вы можете вместо этого использовать метод массива:переберите Object.values из 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:

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
}

, или, возможно, будет понятнее с plain for loop вместо:

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 и date2четко ассоциируется с другим, например, с массивом, а не зависит от каждого объектаслучается иметь одинаковые упорядоченные имена свойств.Хотя порядок свойств гарантирован в современных браузерах, для кода не очень хорошая зависимость.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...