将一组“ true”布尔值变量转换为数组

时间:2018-12-28 08:51:52

标签: javascript arrays boolean

我有一组布尔值,如下所示

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"]

5 个答案:

答案 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));
}

现在将是您的解决方案