Splice返回已删除的元素,而不是返回未删除的所有其他元素

时间:2018-09-11 07:27:28

标签: angular6

getAllClients() {
    this.clientsService.getClients()
    .subscribe(
      data => {
        this.clients= data.splice(22, 1);
        //this.clients = data;
      },
      error => {
        // console.log(JSON.stringify(error))
      }
    );
}

2 个答案:

答案 0 :(得分:0)

如果您阅读the documentation for splice,将会意识到这是一项可变的操作。这意味着使用拼接时,您将:1)返回数组的拼接部分。 2)修改原始数据对象。

示例:

 let a = [1, 2, 3, 4];
 const b = a.splice(2, 1); // b is now [3]
 console.log(a); // the rest of the array [1, 2, 4]

因此,基本上不用用data.splice(22,1)保存this.clients。您应该先执行

data.splice(22, 1);

然后将结果分配给客户

this.clients = data;

我仍然建议您使用一种不变的方式来处理像Ramda function这样的数据

答案 1 :(得分:0)

是的,splice更改数组并返回已删除的元素。毫不奇怪,未删除的元素在数组中。

如果要从数组中删除第22个元素并将该数组分配给this.clients,这是正确的方法:

data.splice(22, 1);
this.client = data;

如果您想使this.client少一个元素,但要使data保持不变,则必须将其克隆:

this.client = data.slice();
this.client.splice(22, 1);