Javascript 角度8:Array.map().slice()无函数n

Javascript 角度8:Array.map().slice()无函数n,javascript,arrays,angular,typescript,firebase,Javascript,Arrays,Angular,Typescript,Firebase,Firebase的Angular 8:Array.map().slice()不起作用。 你好 我一直在尝试使用Angular 8中的.map()和.slice()创建数组的副本,但是使用这些方法,我发现复制的数组仍然具有对原始数组的引用 我不知道我是否做错了,或者这些方法在Angular 8中不起作用 // Iniciamos la escucha de los cambios de la data del usuario if (!this.$userData) { th

Firebase的Angular 8:Array.map().slice()不起作用。 你好 我一直在尝试使用Angular 8中的.map()和.slice()创建数组的副本,但是使用这些方法,我发现复制的数组仍然具有对原始数组的引用

我不知道我是否做错了,或者这些方法在Angular 8中不起作用

 // Iniciamos la escucha de los cambios de la data del usuario
    if (!this.$userData) {
      this.$userData = this.userService.user().valueChanges().subscribe(data => {
        if (data) {
          this.userData = Object.assign({}, data);
          const temp = data.operationsList.map((x) => {
            x.bank = 'Popular';
            return x;
          });
          console.log(this.userData.operationsList, temp);
          if (!this.userData.validated) {
            this.router.navigate(['register/pendingValidation']);
          }
        }
      });
    }
console.log:

(2) [{…}, {…}]
0: {bank: "Popular", commission: 0, country: "ve", countryAllowed: "all", maximum: 0, …}
1: {bank: "Popular", commission: 0, country: "ve", countryAllowed: "all", maximum: 0, …}

(2) [{…}, {…}]
0: {bank: "Popular", commission: 0, country: "ve", countryAllowed: "all", maximum: 0, …}
1: {bank: "Popular", commission: 0, country: "ve", countryAllowed: "all", maximum: 0, …}

修改复制的数组时,更改也会反映在原始数组中。

您正在修改直接在地图中对基础数据的直接引用。将其更改为:

let tempX = Object.assign({}, x);
tempX.bank = 'Popular';
return tempX;

通过复制数组,您仍然保留对相同对象的引用。所以你需要更深一层:

const temp = data.operationsList.map((x) => Object.assign({}, x, { bank: 'Popular' }));

如果您已经在复制数组,为什么不为您的映射使用
const temp=this.userData.operationList.map(…)
Object.assign()
只做“浅层克隆”。@Jbluehdorn我已经用这种方法尝试过了,结果是一样的。谢谢,它对我有用。我不明白的是,为什么在javascritp中.map()函数工作得很好,但是使用angular和firebase来维护对原始数组的引用。angular与此无关。如果您
映射
切片
一组基本体(如数字、字符串或布尔值),您就可以创建一个合法的独立副本。对于一组对象,您需要更加小心。Wr8。不过,如果要将值赋给数组,请尝试使用扩展运算符It's not work,仍然保持对原始数组的引用。