拼接留下记录

splice leave record behind

本文关键字:记录 拼接      更新时间:2023-09-26

为什么我的代码留下一条记录?如果我的 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);
                }
            }
        };

你的代码中有一个错误。

当它运行i=0时,vm.stdListCope.splice(0, 1);将数组切成单个条目的数组。

所以,在i=0之后,vm.stdListCope已经[{"studentId": "40", "studentName": "P Arjun", }]

但是,当循环运行i=1i =2时,vm.stdListCope[i]['studentId'] == Id将不成立,因为没有对应于索引i=1i=2的条目,因为它的长度= 1。

这就是为什么您只剩下 1 个条目的原因。

发生这种情况是因为您在浏览数组时正在拼接数组。因此,删除行时不应增加索引。下面是使用一段时间的代码的更正版本:

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);
                }
            }
        };

希望对您有所帮助!