如何有效地将元素添加/推入数组

时间:2019-01-17 19:36:30

标签: javascript angular typescript ecmascript-6

我有一个数组,名称为 produtosSelecionados

我需要创建一个函数,每个调用将元素 produtosSelecionados 推入数组 produtosConfirmadosAnuncio ,但是如果该元素已经在< strong> produtoConfirmadosAnuncio 。

我尝试类似的事情:

adicionaProdutoConfirmadosAnuncio(){
    for(let i=0;i<this.produtosSelecionados.length;i++){
      for(let j=i+1;j<this.produtosSelecionados.length;j++){
        if(this.produtosSelecionados[i] !== this.produtosSelecionados[j]){
          this.produtosConfirmadosAnuncio.push(this.produtosSelecionados[i]);
        }
      }
    }
    console.log(this.produtosConfirmadosAnuncio);
  }

但是这种方式使元素在我的数组 produtosConfirmadosAnuncio 中不断重复。我该怎么办?

3 个答案:

答案 0 :(得分:6)

我认为您只需要在方法内部使用此代码即可代替嵌套循环。

包含方法有助于检查数组中是否已存在元素。

if(!yourArray.includes(element){
    yourArray.push(element);
}

在您的代码中,您特别需要此:

adicionaProdutoConfirmadosAnuncio(){
    for(let i=0;i<this.produtosSelecionados.length;i++){
        if(!this.produtosConfirmadosAnuncio.includes(this.produtosSelecionados[i])){
            this.produtosConfirmadosAnuncio.push(this.produtosSelecionados[i]);
        }
    }
}

用于..

adicionaProdutoConfirmadosAnuncio(){
    for(let product of this.produtosSelecionados){
        if(!this.produtosConfirmadosAnuncio.includes(product)){
            this.produtosConfirmadosAnuncio.push(product);
        }
    }
}

答案 1 :(得分:2)

您不需要使用双循环,这会影响代码的效率。您可以这样做:

adicionaProdutoConfirmadosAnuncio(){
    for(let producto of this.productosSeleccionados) {
          //indexOf return -1 if the item don't exist in the array
          if(this.productosConfirmadosAnuncio.indexOf(producto) === -1){
            this.productosConfirmadosAnuncio.push(producto);
      }
    }
}

答案 2 :(得分:0)

尝试

class MyClass {

  constructor() {
    this.produtosSelecionados = [{n:"P1"},{n:"P2"},{n:"P3"}];
    this.produtosConfirmadosAnuncio = [];
    this.produtosConfirmadosAnuncio.push(this.produtosSelecionados[0]) // put p1
  }

  adicionaProdutoConfirmadosAnuncio() {   
    this.produtosSelecionados.forEach( 
      p=> this.produtosConfirmadosAnuncio.includes(p) ? 0 : this.produtosConfirmadosAnuncio.push(p) );
    console.log(this.produtosConfirmadosAnuncio);
  }

}

let p = new MyClass();
p.adicionaProdutoConfirmadosAnuncio();