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