Проблема заключается в том, что все подобъекты внутри MonthRow
ссылаются на один и тот же объект (MainData.years
), другими словами MainData.years === MonthRow['1'] === MonthRow['2'] === ...
.Таким образом, изменения в одном из этих подобъектов будут отражены на всех подобъектах, в том числе и на MainData.years
.Вот демонстрация проблемы:
var objA = {};
var objB = objA; // objA is not copied to objB, only a reference is copied
// objA and objB are pointing/referencing the same object
objB.foo = "bar"; // changes to one of them ...
console.log(objA); // ... are reflected on the other
Чтобы это исправить, вам необходимо клонировать объект MainData.years
перед назначением каждому свойству объекта MonthRow
, таким образом, все подобъекты будут разными объектами,Вы можете использовать Object.assign
для этого следующим образом:
MonthRow = {
'1': Object.assign({}, MainData.years),
'2': Object.assign({}, MainData.years),
...
}
Примечание:
Код в вопросе может быть изменен на более короткий, так как вы не можетеВам не нужно циклически перебирать ключи MonthRow
или MainData.year
, вам нужно всего лишь цикл MainData.block
, и для каждого элемента вы просто проверяете, включен ли год текущего элемента в MainData.year
(используя либо * 1028)* или includes
), а затем обновите MainData.MonthRow
, используя год и месяц элемента:
MainData.block.forEach(function(element) {
if(MainData.year.indexOf(element.year) !== -1) {
MainData.MonthRow[element.month][element.year] = element.sale;
}
});