for循环中的Javascript Concat问题

时间:2018-05-08 12:11:37

标签: javascript

如果有条件,我的代码太多了。所以,我想将此代码转换为foreach循环但不知何故它不起作用。

if (str_array[0] === "1" || str_array[1] === "1" || str_array[2] === "1" || str_array[3] === "1" || str_array[4] === "1" || str_array[5] === "1" || str_array[6] === "1" || str_array[7] === "1" || str_array[8] === "1" || str_array[9] === "1" || str_array[10] === "1" || str_array[11] === "1") {
    column_data[0].hidden = false;
}
if (str_array[0] === "2" || str_array[1] === "2" || str_array[2] === "2" || str_array[3] === "2" || str_array[4] === "2" || str_array[5] === "2" || str_array[6] === "2" || str_array[7] === "2" || str_array[8] === "2" || str_array[9] === "2" || str_array[10] === "2" || str_array[11] === "2") {
    column_data[1].hidden = false;
}

我总共有12条if语句或条件。

for (var i = 1; i <= 12; i++) {
    console.log('"' + i + '"');
    if (str_array[0] === '"' + i + '"' || str_array[1] === '"' + i + '"' || str_array[2] === '"' + i + '"' || str_array[3] === '"' + i + '"' || str_array[4] === '"' + i + '"' || str_array[5] === '"' + i + '"' || str_array[6] === '"' + i + '"' || str_array[7] === '"' + i + '"' || str_array[8] === '"' + i + '"' || str_array[9] === '"' + i + '"' || str_array[10] === '"' + i + '"' || str_array[11] === '"' + i + '"') {
        console.log(i - 1);
        column_data[i - 1].hidden = false;
    }
}

循环正常执行,我得到了价值。 "1"中的"2""3""4""5"console.log('"'+i+'"');等。

但不知怎的,它不起作用。它正在使用静态代码但是当我把它放在循环中它不起作用。 qoutes值是否与循环和静态有关。

2 个答案:

答案 0 :(得分:3)

您可以尝试以下

for(var i=1;i<=12;i++) {

  if(str_array.includes(i.toString())) { // converting number to string
     column_data[i-1].hidden = false;
  }
}

供参考,Array.includes

答案 1 :(得分:1)

您可以根据str_array长度

运行另一个循环
str_array.some( s => s == i ) //== will work fine for 1 == "1"

最后

for(var i=1;i<=12;i++)
{
   var flag = str_array.some( s => s == i ) ;
   if( flag ) 
   {
      column_data[i].hidden = false;
   }
}

如果要将hidden属性的值设置为true,如果所有值都不是按索引,则直接将该标志分配给隐藏属性

for(var i=1;i<=12;i++)
{
    column_data[i].hidden = str_array.some( s => s == i );
}