我有一组布尔值,如下所示
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;
如何将所有true变量转换为一个数组,如下所示。
var array = ["prodcat1", "prodcat10"]
答案 0 :(得分:2)
您使用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... */
然后,您可以轻松地遍历它们。
答案 1 :(得分:1)
您在这里所做的事情是非常错误的。可能是的,但是您无法利用阵列的作用。
无论如何要回答您的问题,您可以这样:
let trueArray = [];
for(let i = 1; i <=10; i++){
if(window["prodcat" + i])
trueArray.push("prodcat" + i)
}
console.log(trueArray)
答案 2 :(得分:0)
使用变量然后将变量名称存储在数组中的方法不是最佳的。这样,您就需要手动推送变量名称(如果为true)。
var prodcat1 = true;
var prodcat2 = false;
var prodcat3 = false;
.. ... ...
.. ... ...
var prodcat10 = true;
var myArr = []
//now test for values and push in myArr manually
if (prodcat1) {
myArr.push('prodcat1')
}
if (prodcat2) {
myArr.push('prodcat2')
}
另一种方法是使用eval。但是eval
很难预测,应该避免。
for (let i = 1; i <= 10; i++) {
if (eval('prodcat' + i)) {
myArr.push('prodcat' + i)
}
}
我认为最好的方法是使用一个对象存储您的值。
var myProdcats = {
prodcat1: true,
prodcat2: false
}
var myArray = Object.keys(myProdcats).filter(prodcat => myProdcats[prodcat]) // ["prodcat1", "prodcat2"]
答案 3 :(得分:0)
您可以这样做:
const prodcat1 = true;
const prodcat2 = false;
const prodcat3 = false;
const prodcat4 = false;
const prodcat5 = false;
const prodcat6 = false;
const prodcat7 = false;
const prodcat8 = false;
const prodcat9 = false;
const prodcat10 = true;
const result = Array
.from({length: 10}, (v, i) => i + 1)
.reduce((a, c) => eval(`prodcat${c}`) ? [...a, `prodcat${c}`] : a, []);
console.log(result);
答案 4 :(得分:0)
let arr = [], arr2=[];
for (let i=1; i<=10; i++) {
if (eval("prodcat" + i)) {
arr.push(eval("prodcat" + i));
}else arr2.push(eval("prodcat" + i));
}
现在将是您的解决方案