我目前有一个对象,只要创建一个新对象,就会将其自身添加到数组中。最后,我想删除数组中的所有引用,以便我可以添加新的引用。
我创建了一个对象方法(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;
答案 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)