【问题标题】:How to remove duplicate value in an array Angular 2如何删除数组Angular 2中的重复值
【发布时间】:2017-08-31 03:04:49
【问题描述】:

我有复选框(用户选择的值,选中)。所以我需要编辑这个复选框并将所有选定的值放入一个数组并将其发送到 post。

HTML

<div *ngFor="let item of officeLIST">
  <div *ngIf ="item.officeID== userdata.officeID">
       <input #office type="checkbox" id="office" name="office" class="form-control" value="{{item.officeName}}" checked (click)="officeSelection($event,$event.target.value)" > {{(item.officeName== "" ? "--No data--" : item.officeName)}} 
 </div>
  <div *ngIf ="item.officeID!= userData.officeID">
     <input #office type="checkbox" id="office" name="office" class="form-control" value="{{item.officeName}}" (click)="officeSelection($event,$event.target.value)"> {{(item.officeName== "" ? "--No data--" : item.officeName)}}
 </div>
</div>
 <button type="button" class="btn btn-primary"(click)="updateOffice(userData.officeID)"> Save </button>

点击功能(添加选中值和删除未选中值)

 officeSelection(event: any, value) {        

        if (event.target.checked === true)
        {
               this.officeArray.push(value);
        } 
        else {
            this.officeArray.splice(this.officeArray.indexOf(value), 1);

        }
    }

更新功能

updateOfficeDetail(officeid) {

if(officeid= 1)
{    
         this.officeArray.push('stars dept');
}   
else if(officeid= 2)
{            

         this.officeArray.push('moon dept');
}
else
{          
     this.officeArray.push('Sun dept');

} 

}

问题是 如果我在不更改复选框当前值的情况下更新数据,例如:sun dept,
这个 sun deptpush 进入 officeArray
但是如果我想再次通过编辑复选框来更新数据(选择另一个值),那么之前选择的值和当前选择的值将被推送到这个 officeArray
如果用户没有编辑复选框(仅继续当前选择的值)>>>> officeArray 将如下所示

["sun"]
如果用户尝试通过单击另一个复选框来更新复选框,则数组将如下所示
["太阳","月亮","太阳"]

我只想要 officeArray 中的 ["sun","moon"]。我应该删除吗?或清除什么?

我尝试做一些研究和很多与我相似的问题。但不知何故,所有解决方案都不适合我。有什么想法吗?

谢谢

【问题讨论】:

  • 我想帮忙,但它的描述令人困惑,至少对我来说,你能在代码中添加一个 plunk 吗?我猜会更容易
  • 我明白了。但实际上它是一个大代码,所以我只提取其中的一小部分来查看问题所在......

标签: arrays angular checkbox multidimensional-array


【解决方案1】:

我建议使用 HashMap 而不是数组:

Map<String,String> officeMap = new HashMap<>();
officeMap.put(index, value);

【讨论】:

    【解决方案2】:

    if 方法中的if 表达式中:

    if(officeid === 1)
    

    而不是

    if(officeid= 1)
    

    在您的情况下,我建议使用 Set 而不是 Array:

    class youComponent{
     //...
     officeSelection(event: any, value) {        
    
        if (event.target.checked === true)
        {
            if(this.officeArray.includes(value.trim())){
               this.officeArray.push(value);
            }
        } 
        else {
            this.officeArray.splice(this.officeArray.indexOf(value), 1);
        }
    }
    
    updateOfficeDetail(officeid) {
    
    if(officeid === 1)
    {    
             if(this.officeArray.includes('stars dept')){
                 this.officeArray.push('stars dept');
             }
    
    }   
    else if(officeid === 2)
    {            
           if(this.officeArray.includes('moon dept')){
             this.officeArray.push('moon dept');
           }
    }
    else
    {    
         if(this.officeArray.includes('Sun dept')){
             this.officeArray.push('Sun dept');
         }
    
    } 
    }
    

    }

    【讨论】:

    • 我试过了,但为了声明它,我得到的泛型类型 'Set' 需要 1 个类型参数。我应该在那里提出什么论据?
    • 它的工作方式与数组的工作方式相同。我的星星部门一直添加到列表中,因为它是默认值。那么我该如何制作类似.. 如果这个“stars dep”已经在 officeArray 中,则无需添加,否则我们需要添加。情况如何?
    • @user3431310 看到更新用数组重写代码
    猜你喜欢
    • 1970-01-01
    • 2019-05-22
    • 2015-09-24
    • 2012-06-05
    • 1970-01-01
    • 2011-08-05
    • 2014-07-15
    • 2018-02-13
    • 2018-04-13
    相关资源
    最近更新 更多