I am creating a weather app. My service made a call to the api and mapped the data to a global parameter. My component then accesses the global parameter and modifies the data to the correct format I need through a function.
The problem I am having is for some reason the function is mutating the original data.
As a work around I can create a new time property in my component parameter and the function won't modify the original data. But if I name the component property to time the original service data gets mutated.
Why is it doing this? Did I miss something?
Original mapped service data:
dailyForecast = [
0: {time: 1547618400}
1: {time: 1547704800}
2: {time: 1547791200}
];
weather.service.ts
@Injectable({
  providedIn: 'root'
})
export class WeatherService {
  // Weather parameters
  public dailyForecast: any;
  private weatherUrl = 'http://localhost:3000/weather/data';
  constructor(private http: HttpClient) {
  }
  getWeather(location) {
    return this.http.post(this.weatherUrl, location, httpOptions)
      .pipe(
        map((data: any) => {
          this.dailyForecast = data.daily;
          return data.currently;
        })
      );
  }
}
daily.component.ts
export class DailyComponent implements OnInit {
  dailyForecast: any;
  constructor(public weather: WeatherService) {
    this.dailyForecast = this.weather.dailyForecast.data;
  }
  ngOnInit() {
    this.convertUnixTime();
  }
  convertUnixTime() {
    console.log(this.weather.dailyForecast.data[0].time + ": original before loop")
    for(let i=0; i < this.dailyForecast.length; i++) {
      this.dailyForecast[i].time = this.weather.dailyForecast.data[i].time * 1000;
    console.log(this.weather.dailyForecast.data[0].time + ": original after loop")
    console.log(this.dailyForecast[0].time + ": component")
  }
console log printout
1547618400: original before loop
1547618400000: original after loop
1547618400000: component
If you notice the original number before and after the loop are different because for some reason the function is being applied to the original data.
If I however, change the function to create a new property called timeConverted:
for(let i=0; i < this.dailyForecast.length; i++) {
          this.dailyForecast[i].timeConverted = this.weather.dailyForecast.data[i].time * 1000;
the output is correct
1547618400: original before loop
1547618400: original after loop
1547618400000: component
What gives? Just trying to understand what is going on.
