Инициализация переменной при объединении другой

У меня есть цикл for с переменной value_from_db

for (var i = 0; i < arrayLength; i++) {

   var value_from_db = array[i].value;
}

Однако мне нужно сделать переменную value_from_db_0, value_from_db_1, value_from_db_2 ... в зависимости от i.

Что-то вроде:

var value_from_db_+i = array[i].value;

Цель

  for (var i = 0; i < arrayLength; i++) {
     if ( array[i].condition == '0' ) {                                  

           jQuery("#username").on('change', function() {

            var value = this.value;         

            if ( value === array[i].value ) {  //because array[i].value doesnot seem to work here
                count++;
                alert(count);
            } 
     }
}

поскольку array [i] .value, похоже, не проходит через анонимную функцию, я пытаюсь различить varialbe.

Вы должны создать массив и добавить в него свои значения

ControlAltDel 25.03.2018 04:41

Как вы планируете использовать эти переменные?

Igor 25.03.2018 04:51

@igor Я редактировал вопрос, посмотрите, пожалуйста.

micky 25.03.2018 04:59

О, это совершенно другая проблема, связанная с закрытием и захваченной переменной.

Igor 25.03.2018 05:01

Сколько элементов с id = "username" у вас на странице?

Igor 25.03.2018 05:02
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
66
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

У вас есть несколько вариантов. Первый очевидный - использовать массив:

var value_from_db = array.map(item => item.value)
// then access them with the index directly
console.info(value_from_db[0])

Но если вам действительно нужны эти имена переменных, вы можете довольно легко разместить их в объекте:

var myObj = {}
array.forEach((item, i) => myObj[`value_from_db_${i}`] = item.value)
// the use with something like
console.info(myObj.value_from_db_0)

После прочтения комментариев к ответу на закрытие @Igors, похоже, что вы пытаетесь сделать (и это лучшее предположение из расплывчатого комментария), следить за изменениями в #username и выяснять, все ли значения массива совпадают с тот или иной момент. Если я прав, вы могли бы сделать это так:

// remove unwanted condition items
var conds = array.filter(item => item.condition === '0')
// watch for element changes
jQuery("#username").on('change', function() {
  var comparer = this.value
  // update a match key for any items where a match is found
  conds
    .filter(item => item.value === comparer)
    .forEach(item => item.match = true)

  // check if all matches have been found
  if (conds.every(item => item.match)){
    alert('all matched')
  }
})

После редактирования вопроса это стало совершенно другой проблемой, связанной с закрытием и захваченной переменной.

Потенциально повторяющиеся вызовы jQuery("#username").on('change', ... выглядят подозрительно, но, возможно, в массиве всего один array[i].condition == '0'.

for (var i = 0; i < arrayLength; i++) {
  if ( array[i].condition == '0' ) {                                  
    jQuery("#username").on('change', (function(aValue) {
      return function() {
        var value = this.value;         
        if (value === aValue) {
          count++;
          alert(count);
        }
      }; 
    })(array[i].value));
  }
}

Благодарю. но счет, кажется, увеличивается с каждым изменением. Что мне нужно проверить, так это все ли условия внутри проходов, поэтому я подумал о сопоставлении arrayLength и count, чтобы знать. Однако это, похоже, не работает. Не могли бы вы помочь мне в этом.

micky 25.03.2018 06:35

@micky Я бы хотел, только я понятия не имею, какую проблему вы пытаетесь решить.

Igor 25.03.2018 06:38

Я хочу знать, проходит ли условие на каждой итерации.

micky 25.03.2018 06:41

Другие вопросы по теме