Я новичок в Javascript, и поэтому эти проблемы могут быть чем-то простым, но я не могу найти ответ.
У меня есть класс Country с несколькими параметрами (например, имя, площадь, ppm и т. Д.). c.), А также функция updateCurrentData (input1, input2), которая изменяет текущие значения на новые в зависимости от входных данных. Затем у меня есть класс PPM_Data, который имеет эту функцию:
initialCountries = [];
copyData = [];
PPMPerCountryPerYear(year, inputPopulation, inputDeforestation) {
var result = [];
this.copyData = this.initialCountries.slice(0);
console.log(this.copyData);
console.log(this.initialCountries);
result.push({2020: this.initialCountries});
for (let index = 2021; index <= year; index++) {
this.copyData.forEach(c => {
c.updateCurrentData(inputPopulation, inputDeforestation);
})
let yearData = [];
this.copyData.forEach(c => {
yearData.push(c);
});
result.push({ [index]: yearData });
}
return result;
}
Результат должен возвращать массив со значениями каждой страны по годам, например:
{ 2020: Array(12) },
{ 2021: Array(12) }
...
, где массив содержит каждый данные страны за этот год (предположим, что есть 12 стран). Значения должны немного меняться с каждым годом, что, как мне кажется, происходит, потому что я получаю массив со всеми годами, но массив тот же, и он равен последнему вычислению l oop.
Я загружаю initialCountries стран из CSV-файла с использованием d3:
loadCountries(path) {
var self = this;
var readCsv = d3.csv(path, function (data) {
var country = new Country(data.name, Number(data.area), Number(data.ppm), Number(data.population), Number(data.population_growth), Number(data.forests_percentage), Number(data.forests_growth));
self.initialCountries.push(country);
});
return readCsv;
}
Функция loadCountries вызывается в функции componentWillMount () в приложении. js.
Когда я нажимаю кнопку I, вызовите функцию PPMPerCountryPerYear и, как вы можете видеть, я console.log initialCountries в начале, ДО вызова функции для l oop. Кроме того, я не вызываю ЛЮБОЕ изменение в массиве initialCountries, но выводом журнала консоли являются последние обновленные значения, даже если for l oop даже не запущен. У меня вопрос: почему это происходит и как я могу предотвратить изменение массива initialCountries?