【问题标题】:Javascript: nested for loops to assign valuesJavascript:嵌套for循环以分配值
【发布时间】:2018-12-29 23:20:48
【问题描述】:

我有两个数组:

divideArray = [2, 2, 1];

包含2+2+1个时隙

还有一个包含对象:

starttimeArray = [{starttime: '06:00:00', divideArrayIndex: 0}, {'09:00:00', divideArrayIndex: 0}, {'12:00:00' divideArrayIndex: 0}, {'15:00:00', divideArrayIndex: 0}, {'18:00:00'divideArrayIndex: 0}];

starttimeArray.length等于divideArray的元素之和。

现在我想通过starttimeArray 并将每个“divideArrayIndex”属性“分配”给divideArray 的相应索引,例如:

{starttime: '06:00:00', divideArrayIndex: 0}
{starttime: '09:00:00', divideArrayIndex: 0}
{starttime: '12:00:00', divideArrayIndex: 1}
{starttime: '15:00:00', divideArrayIndex: 1}
{starttime: '18:00:00', divideArrayIndex: 2}

divideArray[0] 的前两个插槽的值为 2,divideArray[1] 的后两个插槽也为 2,divideArray[2] (=1) 为最后一个插槽。

我试图使用嵌套的 for 循环(包括一个 while 循环)来实现这一点,但这不起作用,目前我完全不知道如何做到这一点......

 for (starttimeArrayCounter = 0; starttimeArrayCounter < starttimeArray.length;) {
   for (divideArrayCounter = 0; divideArrayCounter < divideArray.length; divideArray++) {
       while (divideArrayCounter < starttimeArray[starttimeArrayCounter]) {
    console.log(starttimeArray[starttimeArrayCounter], divideArrayCounter);
    starttimeArrayCounter++;
    }
  }
}

提前致谢。

【问题讨论】:

  • 您能发布您的预期输出吗? (不知道你说的'06:00:00' - divideArray[0]是什么意思)

标签: javascript object for-loop nested-loops


【解决方案1】:

您可以遍历dividerArray,将每个元素作为循环计数器,同时映射来自starttimeArray 的元素:

const divideArray = [2, 2, 1];
const starttimeArray = ['06:00:00', '09:00:00', '12:00:00', '15:00:00', '18:00:00'];

let starttimeIndex = 0;
let divideIndex = 0;
for (let loopCounter of divideArray) {
  while (loopCounter > 0) {
    processResult(starttimeIndex, divideIndex);
    starttimeIndex += 1;
    loopCounter -= 1;
  }
  divideIndex += 1;
}

function processResult(starttimeIndex, divideArrayIndex) {
  console.log({
    starttime: starttimeArray[starttimeIndex],
    divideArrayIndex
  });
}

注意:输出正是您在问题中显示的内容,作为文字字符串。它包含必要的信息,请随时根据需要进行调整。

【讨论】:

    【解决方案2】:

    看起来您基本上是在 divideArray 上累积以将索引范围纳入 starttimeArray。您可以使用reduce 来累积索引,同时获取其他数组的切片。在每个循环中获取一个slice,并且forEach 项更改索引属性。

    这将改变 starttimeArray 的位置:

    let divideArray = [2, 2, 1];
    let starttimeArray = [{starttime: '06:00:00', divideArrayIndex: 0}, {starttime:'09:00:00', divideArrayIndex: 0}, {starttime:'12:00:00', divideArrayIndex: 0}, {starttime:'15:00:00', divideArrayIndex: 0}, {starttime:'18:00:00', divideArrayIndex: 0}];
    
    divideArray.reduce((start, next, i) => {
        starttimeArray.slice(start, next+start).forEach(item => item.divideArrayIndex = i)
        return start+next
    }, 0)
    console.log(starttimeArray)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-10
      • 2017-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-14
      相关资源
      最近更新 更多