我正在使用Angular 6
。
在我的组件中,有两个数组变量,如
processedItems: Array<any> = [];
totalProductItems: Array<any> = [];
和类似的处理功能
ngOnInit() {
$products.forEach(async (e) => {
const res = await this.scraperService.scrapSingle(e.url).toPromise();
if (res.status.http_code === 200) {
const properties = this.scraperService.processSingleProduct(res.contents);
const p_item = {};
p_item['properties'] = properties;
this.totalProductItems.push(p_item);
this._applyFilter();
}
}
private _applyFilter() {
if (!this.filterData) {
// if nothing to filter, set totalProductItems;
this.processedItems = this.totalProductItems;
} else {
console.log('applying filter');
// reset processedItems
this.processedItems.length = 0;
// this now prints blank array
console.log(this.totalProductItems);
}
}
将this.processedItems
的length属性设置为0也会清空this.totalProductItems
。
为什么呢?如何使这些变量分开并独立?
答案 0 :(得分:1)
如here所述:
如果将数组分配给变量或将数组传递给函数,则它是对复制或传递的原始数组的引用,而不是数组的值。
因此,在更改本地数组中的length
属性时,您实际上也在修改了引用的数组。
某些解决方案:将变量的副本分配给您的变量,这可以通过以下几种方式实现:
this.processedItems = [...this.totalProductItems];
this.processedItems = this.totalProductItems.concat();
this.processedItems = this.totalProductItems.slice(0);
或者不修改length
属性,而是重置整个本地数组:
代替this.processedItems.length = 0;
,执行:
this.processedItems = [];