拼接留下记录

时间:2016-03-11 14:07:56

标签: javascript angularjs

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

2 个答案:

答案 0 :(得分:3)

您的代码中存在错误。

当它运行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=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);
                }
            }
        };

希望它有所帮助!