【问题标题】:how to prevent duplicate in array push in angularjs如何防止在angularjs中的数组推送中重复
【发布时间】:2014-09-04 13:51:53
【问题描述】:

我的代码是这样的:

var arr = [];
arr.push(item1,item2);

所以arr 将包含如下内容: ["name","thing1"]

但我在推送具有相同精确值的元素时遇到问题,我如何过滤相同的元素值但仍接受更新/更改。 JSFIDDLE

【问题讨论】:

  • 你可以使用jQuery的grepSee this

标签: arrays angularjs


【解决方案1】:

您可以使用arr.indexOf,如果找不到则返回-1,然后您可以添加它。

例如

if (arr.indexOf(item) == -1) {
    arr.push(item);
}

但是,这在旧浏览器中不起作用...

JQuery 有一个方法 ($.indexOf) 适用于所有浏览器,甚至是非常旧的浏览器。

【讨论】:

    【解决方案2】:

    只有 javascript 就足够了。

    如果数组包含项,则其索引 >= 0

    所以你可以这样做,如果 index == -1 ,数组中不存在项,所以你可以推送唯一项

    if(arr.indexOf(item) == -1) {
       arr.push(item);
    }
    

    编辑: 您要求更改号码,就是这样

    var index = arr.indexOf(item);
    if(index > -1) { //checking if item exist in array
      arr[index]++;   // you can access that element by using arr[index], 
                     // then change it as you want, I'm just incrementing in above example
    }
    

    【讨论】:

    • 我尝试使用它,但无法正常工作。而且我仍然想更新数组中的数字,只是不要将整个元素推到数组的末尾
    • 查看修改后的例子
    【解决方案3】:

    正如大多数答案所指出的,您可以使用Array.prototype.indexOf() 方法来确定值是否存在。为了检查这一点,请在ng-change() 事件回调中根据您的ng-models 值属性selects.value 检查字符串数组。

    DEMO

    Javascript

    $scope.goChange = function(name, value){
      if(!~arr.indexOf(value)) {
              arr.push(name, value);
              console.log(arr);
      }
    };
    

    HTML

    <select ng-model="selects" ng-change="goChange(item.name, selects.value)" ng-options="i as i.value for i in options">
      <option value=""></option>
    </select>
    

    【讨论】:

      【解决方案4】:

      你应该使用Angular Filters

      可以找到一些实现作为类似问题的答案:How to make ng-repeat filter out duplicate results

      【讨论】:

        【解决方案5】:

        过滤数组中的重复项(es6):

        let arr = ['foo', 'foo', 'bar', 'baz'];
        Array.from(new Set(arr));
        console.log(arr);
        // ['foo', 'bar', 'baz'];
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-12-23
          • 2021-01-19
          • 2016-12-23
          • 2020-01-24
          • 2019-03-28
          • 1970-01-01
          • 2021-09-17
          • 1970-01-01
          相关资源
          最近更新 更多