使用严格模式时 remove() 的替代方法,使用一个元素过滤并隐藏所有其他元素

Alternative for remove() when using strict mode, filter using one element and hiding all other

我试图在特定条件下使用 remove() 从列表中删除除“Red”之外的所有项目,但是当我调试时,它给出了错误:

"Accessing the 'arguments' property of a function is not allowed in strict mode"

有没有我可以在这种情况下使用的删除替代方法。下面是我正在使用的代码:

for (var k = 0; k < homeCtrl.List.length; k++) {
      if (homeCtrl.ColorList[k].name != 'Red') {
            homeCtrl.ColorList.remove[k];
      }
}

由于您想从 array 中删除项目,您可以简单地使用 Array.prototype.filter():

var array = [  
   {  
      "id":1,
      "name":"Red"
   },
   {  
      "id":2,
      "name":"Blue"
   },
   {  
      "id":3,
      "name":"Red"
   },
   {  
      "id":4,
      "name":"Green"
   },
   {  
      "id":5,
      "name":"Red"
   }
];

var withoutRed = array.filter(function(value) {
  return value.name != "Red";
});

console.log(withoutRed);

您可以使用splice()

for (var k = 0; k < homeCtrl.List.length; k++) {
    if (homeCtrl.ColorList[k].name != 'Red') {
        homeCtrl.ColorList.splice(k, 1);
    }
}

请参阅下面的虚拟示例:

var app = angular.module("sa", []);

app.controller("FooController", function($scope) {

  var homeCtrl = this;
  homeCtrl.List = [{
    name: 'Yello'
  }, {
    name: 'Red'
  }, {
    name: 'green'
  }];
  
  homeCtrl.ColorList = angular.copy(homeCtrl.List);

  homeCtrl.remove = function() {
    for (var k = 0; k < homeCtrl.List.length; k++) {
      if (homeCtrl.ColorList[k] && homeCtrl.ColorList[k].name != 'Red') {
        homeCtrl.ColorList.splice(k, 1);
      }
    }
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app="sa" ng-controller="FooController as fooCtrl">
  
  {{fooCtrl.ColorList}}
  <br><br>
  <a ng-click="fooCtrl.remove()" href="">Clear</a>
</div>

您似乎在这里遇到了问题,因为您正在修改要迭代的列表。 Javascript 不喜欢这样。尝试创建一个新列表,然后替换旧列表。

var myNewList = [];
for (var k = 0; k < homeCtrl.List.length; k++) {
                    if (homeCtrl.List[k].name === 'Red') {
                        myNewList.push(homeCtrl.List[k]);
                    }
// now myNewList only contains the 'Red' elements.