我的逻辑可能有什么问题?
如果我选中(this.holdExists(x,y) != false)
,如果我选中(this.holdExists(x,y) == true)
,则会在任何情况下添加条目,或者根本不添加条目。
//check if the hold with coordinates x,y already exists
holdExists: function(x,y) {
var precision = 0.01;
holds.forEach(function(obj) {
if ( (Math.abs(x - obj.x) < precision)
|| (Math.abs(y - obj.y) < precision) ) {
console.log('Already exists!');
return true
}
return false
});
},
// add hold by coordinates only
addCoordHold: function(x,y) {
if (this.holdExists(x,y) == true) {
var h = Hold(x,y);
holds.push(h);
console.log('added\n', x,y);
} else {
console.log('A hold already exists!');
}
},
答案 0 :(得分:2)
您将从传递给forEach
的迭代器函数返回值,但forEach
并不关心这些返回值,它们与{{1}的返回值无关函数,你已经定义它总是holdExists
。
你可能意味着:
undefined
这有两件事:
它声明了一个变量holdExists: function(x,y) {
var precision = 0.01;
var rv = false;
holds.some(function(obj) {
if ( (Math.abs(x - obj.x) < precision)
|| (Math.abs(y - obj.y) < precision) ) {
console.log('Already exists!');
rv = true;
return true;
}
});
return rv;
},
,用作rv
函数的返回值。
它从holdExists
切换到forEach
,这样您就可以提前结束迭代(some
将始终遍历所有元素。)
如果找到匹配项,则会将forEach
设置为rv
。
如果找到匹配项,则会停止true
循环。
它设置some
函数的返回值。