在连接另一个变量时初始化变量

时间:2018-03-25 02:37:22

标签: javascript jquery

我有这个for for循环变量value_from_db

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

   var value_from_db = array[i].value;
}

但是我需要根据i。

制作变量value_from_db_0, value_from_db_1, value_from_db_2 ....

类似的东西:

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。

2 个答案:

答案 0 :(得分:3)

你有几个选择。第一个显而易见的是使用数组:

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

但是如果你真的想要那些变量名,你可以很容易地将它们放在一个对象中:

var myObj = {}
array.forEach((item, i) => myObj[`value_from_db_${i}`] = item.value)
// the use with something like
console.log(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')
  }
})

答案 1 :(得分:1)

在编辑问题后,这成为一个完全不同的问题,与闭包和捕获的变量有关。

潜在重复调用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));
  }
}