我有一个数组,名称为 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 中不断重复。我该怎么办?
答案 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();