У меня есть цикл 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.
Как вы планируете использовать эти переменные?
@igor Я редактировал вопрос, посмотрите, пожалуйста.
О, это совершенно другая проблема, связанная с закрытием и захваченной переменной.
Сколько элементов с id = "username" у вас на странице?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


У вас есть несколько вариантов. Первый очевидный - использовать массив:
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 Я бы хотел, только я понятия не имею, какую проблему вы пытаетесь решить.
Я хочу знать, проходит ли условие на каждой итерации.
Вы должны создать массив и добавить в него свои значения