Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 窗口中可以容纳多少个单位,并将该值推送到一个数组中_Javascript_Loops_For Loop_Nested Loops_Break - Fatal编程技术网

Javascript 窗口中可以容纳多少个单位,并将该值推送到一个数组中

Javascript 窗口中可以容纳多少个单位,并将该值推送到一个数组中,javascript,loops,for-loop,nested-loops,break,Javascript,Loops,For Loop,Nested Loops,Break,请看我的: 我有一个数据集,我想将一个新值推送到数组中 此值由小于窗口大小的累积大小之和确定 更新: 最后,我尝试创建一组偏移。我想通过计算当前窗口中可以容纳多少数据[I].size.updated.width。innerWidth,我可以知道转换元素的距离。为此,一旦tempGroupSize大于WindowWidth,我需要将该偏移量推送到数据[I].pageGroup。然后移动到下一个数据[i]并重复该过程 如果使用lo dash,这可能会更容易些?我对这方面还很不熟悉 最终数据应类似于:

请看我的:

我有一个数据集,我想将一个新值推送到数组中

此值由小于窗口大小的累积大小之和确定

更新:
最后,我尝试创建一组偏移。我想通过计算当前窗口中可以容纳多少数据[I].size.updated.width。innerWidth,我可以知道转换元素的距离。为此,一旦tempGroupSize大于WindowWidth,我需要将该偏移量推送到数据[I].pageGroup。然后移动到下一个数据[i]并重复该过程

如果使用lo dash,这可能会更容易些?我对这方面还很不熟悉

最终数据应类似于:

 var data = [{
    "size": {
        "original": {
            "height": 2857,
            "width": 2000
        },
        "updated": {
            "width": 718.9359467973399,
            "height": 1027,
            "isPortrait": false
        }
    },
    "ratio": 0.7000350017500875,
    //this is value is an example of the windowwidth > 1436 but less than 2154(3 pages)
    "pageGroup": [1436]
},
//这将对每个索引重复,因为数据集的大小都相同 .更新结束

我在每页上迭代两次,这样我就可以按每页的大小推送一个组数据[I].pageGroup.pushtempGroupSize

问题: 当我休息的时候;似乎两个循环都停止了

问题:

如何使此循环继续,直到for I完成

警告:

我必须返回currentBreakPage以确保我不会迭代已分组的页面

for (var i = 0; i < data.length; i++) {
    for(var k = currentBreakPage; k < data.length; k++){
        //makes sure it's not the first time through
        if(currentBreakPage === 0){
           // console.log('break is:', 0);
            iterator = data[i].size.updated.width;
            //console.log(iterator);
        } else {
            //console.log('break is else:', currentBreakPage);
            iterator = data[currentBreakPage].size.updated.width
        }
        //iterator must be subtracted because we dont want to count the most current page in the the total window size;
        if(tempGroupSize < (windowWidth -  iterator)){
            tempGroupSize += data[k].size.updated.width;
        } else {
            currentBreakPage = k;
            data[i].pageGroup.push(tempGroupSize);

            break;
        }
    }
    console.log('pageGrooup', currentBreakPage)
}
将中断更改为k=data.length


如果你想停止一个循环,只要让你的迭代器出界,这样它就不会再次通过循环。

我更新了你的小提琴,让你知道发生了什么。我修复了一些缺少的分号,并在fiddle窗口中将代码转换为日志

看起来你的数学不是你所期望的。第一个循环通过设置tempGroupSize值,但之后的每个循环都会将currentBreakPage重置回0

只要在SO Snippet窗口中运行此代码,windowWidth-iterator始终返回一个负数,因此代码将始终设置k=currentBreakPage;这意味着k=0。for循环始终设置var k=currentbarkpage,因此您将根据窗口大小创建一个无限循环

当我将其作为JSFIDLE运行时,确实得到了一个更大的数字,但是currentBreakPage将被固定在1,因为这段代码的计算结果总是为false:iftempGroupSize 检查您的算法和数学,并验证您正在尝试做什么

**编辑:这是新的小提琴。我更新了tempGroupSize=0;:

变量记录器={ 日志:函数文本{ var_console=document.getElementById'console'; _console.innerHTML=_console.innerHTML++文本; } }; var windowWidth=window.innerWidth; var tempGroupSize=0, currentBreakPage=0, 迭代器=; logger.log'win'+窗口宽度; 风险值数据=[{ 尺寸:{ 原件:{ 身高:2857, 宽度:100 }, 更新:{ 宽度:10, 身高:1027, isPortrait:错误 } }, 比率:0.7000350017500875, 页面组:[] }, { 尺寸:{ 原件:{ 身高:2857, 宽度:200 }, 更新:{ 宽度:100, 身高:1027, isPortrait:错误 } }, 比率:0.7000350017500875, 页面组:[] }, { 尺寸:{ 原件:{ 身高:2857, 宽度:2000 }, 更新:{ 宽度:100, 身高:1027, isPortrait:错误 } }, 比率:0.7000350017500875, 页面组:[] }, { 尺寸:{ 原件:{ 身高:2857, 宽度:200 }, 更新:{ 宽度:100, 身高:100, isPortrait:错误 } }, 比率:0.7000350017500875, 页面组:[] }, { 尺寸:{ 原件:{ 身高:2857, 宽度:100 }, 更新:{ 宽度:50, 身高:50, isPortrait:错误 } }, 比率:0.7000350017500875, 页面组:[] }, { 尺寸:{ 原件:{ 身高:2857, 宽度:300 }, 更新:{ 宽度:200, 身高:200, isPortrait:错误 } }, 比率:0.7000350017500875, 页面组:[] }, { 尺寸:{ 原件:{ 身高:2857, 宽度:400 }, 更新:{ 宽度:100, 身高:1027, isPortrait:错误 } }, 比率:0.7000350017500875, 页面组:[] }, { 尺寸:{ 原件:{ 身高:2857, 宽度:500 }, 更新:{ 宽度:200, 身高:1027, isPortrait:错误 } }, 比率:0.7000350017500875, 页面组:[] }]; logger.logdata.length; 对于变量i=0;i
for(j=0;j<val1;j++)
{
for(k=0;k<val2;k++)
{
if(condition)
break;
}
//after break you will be here in second loop
}

也许我很愚蠢,但在我打破了内环之后,它似乎仍然没有运行外环。最后,pageGroup将成为页面分组的单个值。根据屏幕分辨率的不同,它的值应该是718或1436。@MatthewHardwood是的,ps2goat发布的另一个答案更详细。简而言之,似乎您从来没有真正命中第一个if,而总是命中else,因为windowWidth迭代器总是返回负数。即使循环正在取消,currentBreakPage实际上从未更改值—它始终保持为0。不确定你想达到什么目的,所以如果你更新你的问题,也许人们可以帮助你。但我向你们保证,这就是你们打破循环的方式:嘿,伙计,我用一个更简洁的问题更新了这个问题。也许你能看看吗?最后我尝试创建一组偏移。通过计算当前window.innerWidth中可以容纳多少数据[i],我可以知道转换元素的距离。一旦tempGropuSize大于WindowWidth,我需要将该偏移量推送到数据[I].pageGroup。然后转到下一个数据[i]并重复该过程。@MatthewHarwood,我更新了代码段和JSFIDLE。窗口宽度的某些数据值太大,小提琴无法正常工作,而SO代码段也无法正常工作。我已经将这里的代码片段更改为使用更小的值。我的回答表明,对于我来说,我正在完成。一旦iftempGroupSize