Javascript: вложенный для циклов для присвоения значений - PullRequest
0 голосов
/ 30 декабря 2018

У меня есть два массива:

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 и "присвоить" каждому свойству "divArrayIndex" соответствующий индекс 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 для следующих 2 слотов и divideArray[2] (= 1) для последнего слота.

Iпытался добиться этого с помощью вложенных циклов 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++;
    }
  }
}

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

Похоже, что вы в основном накапливаете за 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)
0 голосов
/ 30 декабря 2018

Вы можете выполнять итерацию по 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
  });
}

Примечание: вывод - это именно то, что вы показали в своем вопросе, взятое в виде буквенной строки.Он содержит необходимую информацию, не стесняйтесь настраивать ее по мере необходимости.

...