javascript - 将一组“真”布尔值变量转换为数组
问题描述
我有一组布尔值如下
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"]
解决方案
您通过使用变量名称(如 )有点把自己画在一个角落里,因为如果不使用可怕的函数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... */
然后,您可以轻松地遍历它们。
推荐阅读
- python - 转换为日期时间,假设日期的一部分可能会丢失
- python - 将 Word docx 导入 Google Colab,以便 docx 中的图形和表格按原样显示
- kubernetes - 在生产中使用 ingress-nginx 节点端口访问集群可以吗?
- .net - 如何在 .net 5 中使用 log4net 登录数据库
- mysql - 如何计算出总不同值减去 MySQL 中的分组不同值
- clojure - 为什么在 def 中是 '@foo Cons 而不是 PersistentList 的类?
- javascript - 查找未出现在数组中的最小正整数
- rabbitmq - 带有 Celery&RabbitMQ 的 Airflow 多节点集群 - HA RabbitMQ 的 broker_url 设置问题
- c++ - 为什么`T&&`不粘?
- html - 如何对齐引导卡中的 3 个图像以使它们并排?