Javascript foreach不执行所有对象

时间:2018-02-24 15:53:55

标签: javascript arrays

我目前有一个对象,只要创建一个新对象,就会将其自身添加到数组中。最后,我想删除数组中的所有引用,以便我可以添加新的引用。

我创建了一个对象方法(this.removeFromArray()),它在数组中查找自己并拼接出来。 removeAll()运行一个for循环,使得数组中的每个对象都运行removeFromArray(),所以我希望当我尝试读出数组中的项时,我什么也得不到。

相反,根据创建的对象数量,我会留下一两个。如何修复此问题并清除阵列中的所有对象?



var objArray = [];

function obj(name) {
  objArray.push(this);
  console.log("Created "+name);

  this.name = name;
  this.removeFromArray = function() {
    objArray.splice(
      objArray.findIndex(function(e) {
        return e == this;
      }),
      1
    );
  }
}

function removeAll() {
  for (var i = 0; i <= objArray.length - 1; i++) {
    objArray[i].removeFromArray();
  }
}

var foo = new obj("foo");
var bar = new obj("bar");
var cat = new obj("cat");
var dog = new obj("dog");
var bird = new obj("bird");

removeAll();

for (var i = 0; i <= objArray.length-1; i++) { //Check the values in the array for leftovers
  console.log(objArray[i].name);
}

//Expected nothing in the console but the creation messages, got foo and bar instead
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:1)

如果您只想删除所有创建的对象,请编辑removeAll()函数,如下所示:

请注意,您必须为objArray.length创建变量,而不是直接将objArray.length置于for()循环。

function removeAll() {
  var len = objArray.length;
  for (var i = 0; i <= len - 1; i++) {
    objArray.splice(0,1);
  }
}

答案 1 :(得分:1)

实现这一目标的更好方法是通过原型利用继承。它比在构造函数对象中创建一个函数更好。

[~, I] = pdist2(X,Y,'euclidean','Smallest',1)