我的代码非常简单,但是由于某种原因,根据使用的方法(chartIsVisible
或chartIsVisible2
),我得到不同的结果。有什么不同?
function chartIsVisible(id) {
for (var i = 0; i < charts.length; i++) {
if (charts[i].Id == id)
return true;
}
return false;
}
function chartIsVisible2(id) {
charts.forEach(function (chart) {
if (chart.Id == parseInt(id))
return true;
});
return false;
}
function insertMissingQueues(responses) {
responses.forEach(function (response) {
if (chartIsVisible(response.Id)) {
console.log("IT IS VISIBLE");
} else {
console.log("ITS NOT VISIBLE");
}
if (chartIsVisible2(response.Id)) {
console.log("IT IS VISIBLE");
} else {
console.log("ITS NOT VISIBLE");
}
});
addChart(responses.Id);
}
insertMissingQueues(response);
output: ITS NOT VISIBLE
output: ITS NOT VISIBLE
insertMissingQueues(response);
output: IT IS VISIBLE
output: ITS NOT VISIBLE // I expected different result there..
答案 0 :(得分:0)
如注释所示,您的return true
不在正确的范围内。出于您的目的,Array.some会很好地工作,如果您的函数对任何数组元素返回true,则返回true,然后停止处理,从而节省了一些周期。
例如:
function chartIsVisible2(id) {
return charts.some(function (chart) {
if (chart.Id == parseInt(id))
return true;
});
}