for和foreach给出不同的结果

时间:2018-09-12 14:04:57

标签: javascript

我的代码非常简单,但是由于某种原因,根据使用的方法(chartIsVisiblechartIsVisible2),我得到不同的结果。有什么不同?

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..

1 个答案:

答案 0 :(得分:0)

如注释所示,您的return true不在正确的范围内。出于您的目的,Array.some会很好地工作,如果您的函数对任何数组元素返回true,则返回true,然后停止处理,从而节省了一些周期。

例如:

function chartIsVisible2(id) {
    return charts.some(function (chart) {
        if (chart.Id == parseInt(id))
            return true;
    });
}