Перебор другого массива для условий с использованием цикла forEach

#javascript #arrays #foreach

#javascript #массивы #foreach

Вопрос:

Я создал функцию с именем checkLength(input, min, max), которая принимает ввод имени пользователя и пароля, как показано ниже.

 checkLength(username, 3, 15);
checkLength(password, 8, 25);
  

Тем не менее, я хочу передать inputArray, minArray, maxArray, чтобы уменьшить повторяемость с помощью цикла forEach. Но похоже, что цикл forEach может принимать только один массив за раз. Любые предложения о том, как я могу это улучшить?

 checkLength2([username,password], [3,8], [8,15])

function checkLength2 (inputArray, minArray, maxArray, i=0) {
inputArray.forEach(input => {
    if (input.value < minArray[i]) {
        //another error function
        i  ;
    }
});}
  

Комментарии:

1. Я думаю, что ваш оригинальный подход с двумя вызовами функций имеет гораздо больше смысла

2. [[username, 3, 8], [password, 8, 15]].forEach(args => checkLength(...args)); это подход.

3. I'm looking to pass in an inputArray, minArray, maxArray и теперь у вас есть 3 списка, которые вам нужно поддерживать и синхронизировать

Ответ №1:

Вы должны попробовать индексировать из forEach цикла.

 function checkLength2 (inputArray, minArray, maxArray) {
  inputArray.forEach((input, i) => {
      if (input.value < minArray[i]) {
          // do something
      } else if (input.value > maxArray[i]) {
          // do something else
      }
  });
}
  

Комментарии:

1. Спасибо! Это было именно то, что я искал.

Ответ №2:

если вы хотите показать то же сообщение, вы можете попробовать это. или же вы можете использовать оператор if / else для проверки как minArray, так и maxArray

 function checkLength2(inputArray, minArray, maxArray, i = 0) {    
  for (let index = 0; index <= inputArray.length; index  ) {    
    if (inputArray[index].value < minArray[index] amp;amp; inputArray[index].value>maxArray[index]) {    
      //error
    }
  }
}