调用外部函数后JQuery循环停止

调用外部函数后JQuery循环停止,jquery,loops,Jquery,Loops,我有一个带循环的函数,它调用(如果条件为true)另一个函数。push()将数据作为对象返回到数组中。 发生的情况是,在第一次调用第二个函数后,第一个函数的循环停止,代码继续到代码的下一部分(chrome控制台中没有错误,我推送了正确的对象)。 有什么问题 第一个功能: if (window.localStorage.length > 1) { track_items_for_chart = []; for (i = 0; i < window

我有一个带循环的函数,它调用(如果条件为true)另一个函数。push()将数据作为对象返回到数组中。 发生的情况是,在第一次调用第二个函数后,第一个函数的循环停止,代码继续到代码的下一部分(chrome控制台中没有错误,我推送了正确的对象)。 有什么问题

第一个功能:

    if (window.localStorage.length > 1) {
        track_items_for_chart = [];
        for (i = 0; i < window.localStorage.length; i++) {
            console.log(i);
            var key_name = (window.localStorage).key(i);
            var record_time = (window.localStorage.getItem(key_name));
            if (record_time !== '[]') {
                console.log("record_time !== '[]'");
                if (key_name !== 'exp') {
                    console.log("key_name !== 'exp'");
                    if (key_name !== 'ripple-last-load') {
                        console.log("key_name !== 'ripple-last-load'");
                var computed_info = get_total_km(key_name);
                    }

                }


            }
        }
function get_total_km($object_key) {

    // Get all the GPS data for the specific workout
    var data = window.localStorage.getItem($object_key);

    // Turn the stringified GPS data back into a JS object
    data = jQuery.parseJSON(data);
    if (data) {
        // Calculate the total distance travelled
        total_km = 0;
        for (i = 0; i < data.length; i++) {

            if (i === (data.length - 1)) {
                break;
            }

            total_km += gps_distance(data[i].coords.latitude, data[i].coords.longitude, data[i + 1].coords.latitude, data[i + 1].coords.longitude);
        }

        total_km_rounded = parseFloat(total_km.toFixed(2));
        // Calculate the total time taken for the track
        start_time = new Date(data[0].timestamp).getTime();
        end_time = new Date(data[data.length - 1].timestamp).getTime();
        total_time_ms = end_time - start_time;
        total_time_s = total_time_ms / 1000;
        final_time_m = Math.floor(total_time_s / 60);
        final_time_s = Math.floor(total_time_s - (final_time_m * 60));
//        console.log({total_km_rounded: total_km_rounded, final_time_m: final_time_m, final_time_s: final_time_s});
        var time_mas = parseFloat(final_time_m + "." + final_time_s);
        track_items_for_chart.push(total_km_rounded, time_mas);
    }
}
if(window.localStorage.length>1){
跟踪图表=[]中的项目;
对于(i=0;i
第二个功能:

    if (window.localStorage.length > 1) {
        track_items_for_chart = [];
        for (i = 0; i < window.localStorage.length; i++) {
            console.log(i);
            var key_name = (window.localStorage).key(i);
            var record_time = (window.localStorage.getItem(key_name));
            if (record_time !== '[]') {
                console.log("record_time !== '[]'");
                if (key_name !== 'exp') {
                    console.log("key_name !== 'exp'");
                    if (key_name !== 'ripple-last-load') {
                        console.log("key_name !== 'ripple-last-load'");
                var computed_info = get_total_km(key_name);
                    }

                }


            }
        }
function get_total_km($object_key) {

    // Get all the GPS data for the specific workout
    var data = window.localStorage.getItem($object_key);

    // Turn the stringified GPS data back into a JS object
    data = jQuery.parseJSON(data);
    if (data) {
        // Calculate the total distance travelled
        total_km = 0;
        for (i = 0; i < data.length; i++) {

            if (i === (data.length - 1)) {
                break;
            }

            total_km += gps_distance(data[i].coords.latitude, data[i].coords.longitude, data[i + 1].coords.latitude, data[i + 1].coords.longitude);
        }

        total_km_rounded = parseFloat(total_km.toFixed(2));
        // Calculate the total time taken for the track
        start_time = new Date(data[0].timestamp).getTime();
        end_time = new Date(data[data.length - 1].timestamp).getTime();
        total_time_ms = end_time - start_time;
        total_time_s = total_time_ms / 1000;
        final_time_m = Math.floor(total_time_s / 60);
        final_time_s = Math.floor(total_time_s - (final_time_m * 60));
//        console.log({total_km_rounded: total_km_rounded, final_time_m: final_time_m, final_time_s: final_time_s});
        var time_mas = parseFloat(final_time_m + "." + final_time_s);
        track_items_for_chart.push(total_km_rounded, time_mas);
    }
}
函数获取总公里数($object\u key){
//获取特定训练的所有GPS数据
var data=window.localStorage.getItem($object\u key);
//将字符串化的GPS数据转换回JS对象
data=jQuery.parseJSON(数据);
如果(数据){
//计算行驶的总距离
总公里=0;
对于(i=0;i
ּ在两个函数中都以
for(var i=0)
开始。如果您使用其他语言,这会有点混淆,但JS将所有i(直到您使用var定义它们)指示为相同的参数。因此,在第二次函数运行后,i已经大于您的本地存储长度

您需要阅读更多关于JS参数范围的信息


也许从这里开始:

您有这样一行:
var computed\u info=get\u total\u km(key\u name);
但是您实际上从未从
get\u total\u km
返回值。我不想什么都不返回。但无论如何,我已经在第二个函数中添加了return;,但它仍然是一样的……例如,这比“JS将所有的i表示为同一个参数”。非常不总是这样,但对于这段代码来说是正确的。我的意思是我知道它,但没有发现它,无论如何我不知道completed是什么意思;不要紧,来自我的+1