使用严格模式时 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.
我试图在特定条件下使用 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.