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