首页 > 解决方案 > 将一组“真”布尔值变量转换为数组

问题描述

我有一组布尔值如下

var prodcat1 = true;
var prodcat2 = false;
var prodcat3 = false;
var prodcat4 = false;
var prodcat5 = false;
var prodcat6 = false;
var prodcat7 = false;
var prodcat8 = false;
var prodcat9 = false;
var prodcat10 = true;

如何将所有真实变量转换为一个数组,如下所示。

  var array = ["prodcat1", "prodcat10"]

标签: javascriptarraysboolean

解决方案


您通过使用变量名称(如 )有点把自己画在一个角落里,因为如果不使用可怕的函数prodcat5,您就无法真正迭代它们。eval()

let arr = [];

for (let i=1; i<=10; i++) {
  if (eval("prodcat" + i)) {
    arr.push("prodcat" + i);
  }
}

这是一种非常糟糕的做法,eval()通常会带来安全风险。

另一个解决方案可能更好(如果您在浏览器中运行代码),那就是 ThatBrianDude 提出的(见下文),通过(ab)使用该window对象。

但是所有这些解决方案都是有缺陷的,因为这个问题很容易避免。一个更好的解决方案是调用一个数组prodcat并在其中存储值,如下所示:

prodcat[0] = true;
prodcat[1] = false;
/* etc... */

然后,您可以轻松地遍历它们。


推荐阅读