У меня есть код для обработки некоторых данных, которые поступают из наблюдаемого, этот наблюдаемый получается через аннотацию @Input, я подписываюсь на наблюдаемый внутри моего NgOnInit(), все работало нормально, но мне нужно было добавить код, чтобы уменьшить обработку время данных, которые представляют собой массив массивов, мои данные выглядят так:
[['id1', объект, объект], ['id2', объект, объект]]
Итак, чтобы сократить время обработки, я создал переменную, которая будет содержать предыдущее постобработанное значение Observable, и я сравниваю предыдущие данные с новыми данными и обновляю только те данные, которые изменились, мой код выглядит так:
private dataSetHolder: Array<any> = [];
constructor() { }
ngOnInit() {
this.dataSet$.subscribe(data => { //line 43
console.log('inicio: ', this.dataSetHolder);
data.forEach(array => {
const dataNoId = Object.assign([], array);
const id = array[0];
dataNoId.shift();
let pacote: Package = { eixo_x: [], eixo_y: [] };
if (this.dataSetHolder.length === 0) {
pacote = this.separaDados(dataNoId, id, pacote);
this.loadData(pacote);
} else {
this.dataSetHolder.forEach(arrayHolder => {
if (id === arrayHolder[0]) {
if (array.length > arrayHolder.length) {
pacote = this.separaDados(dataNoId, id, pacote);
this.loadData(pacote);
}
}
});
}
});
this.dataSetHolder = data; //line 64
});
}
При выполнении строки 64 текущее значение данных передается в this.dataSetHolder, когда наблюдаемое получает новое значение, снова выполняется строка 43, а при выполнении строки 43 значение this.dataSetHolder обновляется, что не должно случиться, он должен быть обновлен только в строке 64.
Кто-нибудь понимает, что там происходит?
Обратите внимание, что от этого последнего изображения к следующему я не нажимал «Продолжить отладку», я все еще нахожусь в строке 44.
Я также попытался изменить строку 64 на это
this.dataSetHolder = Object.assign([], data);
Потому что я думал, что это может быть вызвано javascript, потому что, когда я делаю this.dataSetHolder = data; на самом деле он не передает объект, а только ссылку, но это все равно не работает.
this.dataSetHolder = []; data.foreach(dataItem => this.dataSetHolder.push({... dataItem}));
- person bmtheo   schedule 31.01.2020let clone = JSON.parse(JSON.stringify(objectToBeCloned));
Object.assign не работает для глубокого клонирования. developer.mozilla.org/en-US/ документы/Интернет/JavaScript/Справочник/ - person EM15   schedule 31.01.2020