Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从数组中删除特定类型的每个对象_Javascript_Angularjs - Fatal编程技术网

Javascript 如何从数组中删除特定类型的每个对象

Javascript 如何从数组中删除特定类型的每个对象,javascript,angularjs,Javascript,Angularjs,在我的角度控制器中,我创建了一个方法,该方法附加到我的作用域上的单击处理程序。此单击处理程序检查复选框是否已选中,并将关联对象从数组中拉出或放回数组中 我的else块将对象推回到数组中,效果非常好。但是,我尝试从数组中拼接这些对象的if块无效 以下是相关代码: vm.checkToggle = function(isChecked, value) { if (!isChecked) { var length = vm.markers.length; for (var i =

在我的角度控制器中,我创建了一个方法,该方法附加到我的作用域上的单击处理程序。此单击处理程序检查复选框是否已选中,并将关联对象从数组中拉出或放回数组中

我的
else
块将对象推回到数组中,效果非常好。但是,我尝试从数组中拼接这些对象的
if
块无效

以下是相关代码:

vm.checkToggle = function(isChecked, value) {
  if (!isChecked) {
    var length = vm.markers.length;
    for (var i = 0; i < length; i++) {
      if (vm.markers[i].type === value) {
        vm.markers.splice(i, 1);
      }
    }
  } else {
  ...
};
vm.checkToggle=函数(已检查,值){
如果(!已检查){
var length=vm.markers.length;
对于(变量i=0;i

我相信现在发生的事情是,每次我从数组中拼接时,数组的长度都会缩短,因此在循环的中途不可避免地遇到一个无法读取未定义的属性“type”的错误。我如何处理从数组中删除这些对象而不遇到此问题?

您必须迭代bacKWARD在数组上移动,这样索引就不会移动。类似这样的东西(未测试)


向后迭代数组,这样索引就不会改变。@GeorgettePincin,谢谢!
for(var i=length-1;i>=0;i--)
工作起来很有魅力!如果你想把它作为一个答案,我想感谢你的帮助。一个简单的解决办法就是使用。一点问题都没有。事实上,我在一次面试中被问到这个问题是为了一个编码挑战……你能遇到它真是太好了!
vm.checkToggle = function(isChecked, value) {
  if (!isChecked) {
    var length = vm.markers.length;
    for (var i = length - 1; i >= 0; i--) {
      if (vm.markers[i].type === value) {
        vm.markers.splice(i, 1);
      }
    }
  } else {
  ...
};