为什么我的下面代码留下一条记录?如果我的Id = 40
,它应该从vm.events中删除所有3条记录vm.events = [
{
"studentId": "40",
"studentName": "P Arjun",
},
{
"studentId": "40",
"studentName": "P Arjun",
},
{
"studentId": "40",
"studentName": "P Arjun",
}
];
vm.setSelectedStudent = function (Id) {
vm.stdListCope = angular.copy(vm.events);
for (var i in vm.stdListCope) {
if (vm.stdListCope[i]['studentId'] == Id) {
vm.stdListCope.splice(i, 1);
}
}
};
答案 0 :(得分:3)
您的代码中存在错误。
当它运行i=0
时,vm.stdListCope.splice(0, 1);
使用单个条目将数组切片到数组。
因此,在i=0
之后,vm.stdListCope
有[{"studentId": "40", "studentName": "P Arjun", }]
但是,当循环运行i=1
或i =2
时,vm.stdListCope[i]['studentId'] == Id
不会成立,因为没有与索引i=1
对应的条目和{ {1}}因长度= 1。
这就是为什么你只留下一个条目。
答案 1 :(得分:0)
这是因为您在浏览数组时正在拼接数组。因此,删除行时不应增加索引。以下是使用while的代码的更正版本:
vm.events = [
{
"studentId": "40",
"studentName": "P Arjun",
},
{
"studentId": "40",
"studentName": "P Arjun",
},
{
"studentId": "40",
"studentName": "P Arjun",
}
];
vm.setSelectedStudent = function (Id) {
vm.stdListCope = angular.copy(vm.events);
for (var i = 0; i < list.length; i++) {
while (vm.stdListCope[i] != undefined && vm.stdListCope[i]['studentId'] == Id) {
vm.stdListCope.splice(i, 1);
}
}
};
希望它有所帮助!