Как я могу l oop этот массив? - PullRequest
1 голос
/ 23 февраля 2020

var today = new Date();
if (today.getDay() == 6 || today.getDay() == 0) {

  document.getElementById("name1").innerHTML = "WEEKEND";
  document.getElementById("name2").innerHTML = "WEEKEND";

} else {

  var d = new Date().getDay();
  var names1 = ['1', '2', '3'];
  var names2 = ['1', '2', '3', '4'];
  var n1 = names1.length;
  var n2 = names2.length;

  for (var i = 0; i < n1; i++) {
    document.getElementById("name1").innerHTML = names1[d - 1];
  }

  for (var j = 0; j < n2; j++) {
    document.getElementById("name2").innerHTML = names2[d - 1];
  }
}

Мне нужно показать на экране 2 числа из этих массивов, но массивы не равны, поэтому я хочу, чтобы массив, который короче, начинался снова и формировал пары с остальные числа из более длинного массива.

По сути, посылка должна отображать по 1 имени из каждой группы каждый рабочий день на экране.

EX:

1 1
2 2
3 3
1 4
2 1
3 2

et c .

Ответы [ 3 ]

2 голосов
/ 23 февраля 2020

Общее количество возможных комбинаций будет умножением длины массивов n1*n2

var d = 1; // new Date().getDay()
var names1 = ['1', '2', '3'];
var names2 = ['1', '2', '3', '4'];
var n1 = names1.length;
var n2 = names2.length;

for (var i = 0; i < n1 * n2 ; i++) {
  console.log(names1[i%n1], names2[i%n2]);
}

Также у вас есть избыточный код, используйте только одну переменную для даты

var today = new Date().getDay()
if (today == 6 || today == 0) {

  document.getElementById("name1").innerHTML = "WEEKEND";
  document.getElementById("name2").innerHTML = "WEEKEND";

} else {
  // var d is the same as var today
2 голосов
/ 23 февраля 2020

Здесь вы go:

var N = 20; // or whetever
var arr1 = [1, 2, 3];
var arr2 = [1, 2, 3, 4];

var res = [];
for(var i=0; i<N; i++){
  res.push(arr1[i%arr1.length]);
  res.push(arr2[i%arr2.length]);
}
console.log(res);

Так в общем, для любого шага N ваш пирс arr1[N%arr1.length], arr2[N%arr2.length]

1 голос
/ 23 февраля 2020

Элегантное решение будет использовать оператор% (по модулю). Этот оператор дает остаток после того, как первый операнд разделен на второй операнд.

Например:

7% 2 = 1

8% 5 = 3

Если я правильно понимаю ваш код, вы просто хотите отобразить два числа, по одному в каждом элементе документа с идентификаторами name1 и name2 соответственно. В этом случае нет необходимости в oop.

document.getElementById("name1").innerHTML = names1[d % n1];
document.getElementById("name2").innerHTML = names1[d % n2];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...