Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.10.2018, 13:29
Аспирант
Отправить личное сообщение для kuchuluk Посмотреть профиль Найти все сообщения от kuchuluk
 
Регистрация: 04.04.2014
Сообщений: 33

Как совместить два цикла each и for?
Здравствуйте.
Работаю со строкой из таблицы, в которой много значений. Получаю значения всех ячеек в массив parentTR, получается около 33 ячеек. Также есть еще один массив fromBD.childNodes, в котором 5 значений. Нужно реализовать поочередную вставку соответствующих значений второго массива в соответствующую по порядку ячейку строки таблицы, ячейки которой в первом массиве.
Как можно это реализовать? Нужно конечно использовать цикл each, но как внутри него использовать второй цикл, тем более для короткого массива из 5-ти элементов?
Или просто через условие делать? так:
parentTR.children().each(function(i, elem) {
  if (i == 1) {
    $(elem).text(fromBD.childNodes[0].innerHTML);
  } else if (i == 2) {
    $(elem).text(fromBD.childNodes[1].innerHTML);
  } else if (i == 3) {
    $(elem).text(fromBD.childNodes[2].innerHTML);
  } else if (i == 4) {
    $(elem).text(fromBD.childNodes[3].innerHTML);
  } else if (i == 5) {
    $(elem).text(fromBD.childNodes[4].innerHTML);
  }  else if (i == 6) {
    $(elem).text(fromBD.childNodes[0].innerHTML);
  }
  // и по новой и так далее
}

Или как-то проще можно объединить два цикла, чтобы не писать условия по 33 раза?
Ответить с цитированием
  #2 (permalink)  
Старый 23.10.2018, 13:38
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

kuchuluk,
Вы уверены, что так?
if (i == 1) {
    $(elem).text(fromBD.childNodes[0].innerHTML);[b]kuchuluk[/b],

а где i == 0?
Ответить с цитированием
  #3 (permalink)  
Старый 23.10.2018, 13:47
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

parentTR.children().each(function(i, elem) {
    var j = i - Math.floor(i / 5 ) * 5;
    $(elem).text(fromBD.childNodes[j].innerHTML);
 }

Где j - вот такое
for(var i = 0; i < 33; i++) {
alert(i - Math.floor(i / 5 ) * 5);
}
Ответить с цитированием
  #4 (permalink)  
Старый 23.10.2018, 13:47
Аспирант
Отправить личное сообщение для kuchuluk Посмотреть профиль Найти все сообщения от kuchuluk
 
Регистрация: 04.04.2014
Сообщений: 33

Сообщение от Dilettante_Pro Посмотреть сообщение
а где i == 0?
Ну там значение первого столбца в таблице не меняю, так как там порядковый номер строки стоит. Ну даже если и с нуля начать, суть вопроса от этого не меняется
Ответить с цитированием
  #5 (permalink)  
Старый 23.10.2018, 13:52
Аспирант
Отправить личное сообщение для kuchuluk Посмотреть профиль Найти все сообщения от kuchuluk
 
Регистрация: 04.04.2014
Сообщений: 33

Сообщение от Dilettante_Pro
for(var i = 0; i < 33; i++) {
alert(i - Math.floor(i / 5 ) * 5);
}
Этот цикл получается запускать до цикла each? Или в его теле?
Ответить с цитированием
  #6 (permalink)  
Старый 23.10.2018, 14:06
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Сообщение от kuchuluk
Этот цикл получается запускать до цикла each? Или в его теле?
Это просто иллюстрация.
Весь ваш цикл выше.
Если пропускать первую ячейку, то ваш скрипт

parentTR.children().each(function(i, elem) {
   if(i > 0) {
      var j = i - Math.floor((i - 1) / 5 ) * 5 - 1;
      $(elem).text(fromBD.childNodes[j].innerHTML);
   }
 }
Ответить с цитированием
  #7 (permalink)  
Старый 23.10.2018, 16:16
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

%
__________________
29375, 35

Последний раз редактировалось Aetae, 23.10.2018 в 16:19.
Ответить с цитированием
  #8 (permalink)  
Старый 23.10.2018, 18:15
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Aetae,
Да, так проще
parentTR.children().each(function(i, elem) {
   if(i > 0) {
      var j =(i - 1) % 5 ;
      $(elem).text(fromBD.childNodes[j].innerHTML);
   }
 }
Ответить с цитированием
  #9 (permalink)  
Старый 25.10.2018, 12:03
Аспирант
Отправить личное сообщение для kuchuluk Посмотреть профиль Найти все сообщения от kuchuluk
 
Регистрация: 04.04.2014
Сообщений: 33

А как-нибудь можно улучшить, чтобы если какой-то из элементов первого массива (то есть elem) равен какому-нибудь значению, то чтобы в эту ячейку ничего не вставлялось и чтобы дальнейшая вставка происходила в следующую за ней ячейку, но с того элемента массива fromBD.childNodes[j], который должен был вставиться в ту ячейку, в которую ничего вставлено не было.
Если делаю так:
if (i > 3) {
  if (elem.innerHTML == 'В') {
    return;
  }
  var j =(i - 4) % 5;
  $(elem).text(fromBD.childNodes[j].innerHTML);
}

То в эту ячейку ничего не добавляется, но в следующую вставляется значение уже следующего элемента массива fromBD.childNodes, а не того, который был пропущен
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
foreach как узнать о завершении работы цикла? DDim1000 Элементы интерфейса 9 23.08.2018 21:07
Как поделить два значения? free_style jQuery 2 11.12.2014 12:18
Как таймер заставить работать поочерёдно вызываю одну и ту же функцию два раза? JavaScriptProgrammer Events/DOM/Window 12 08.11.2012 23:41
Как взятые данные с цикла присоединить к одной переменной ? saturn Элементы интерфейса 2 25.11.2011 13:01
Как можно совместить 2 "одинаковые javascript но разные внутри" в одну страницу?..ато rashid86 Элементы интерфейса 2 25.04.2011 22:49