如何将布尔对象转换为数组

时间:2017-08-25 23:32:09

标签: javascript typescript lodash

如何使用布尔值取一个简单的对象并将其转换为一个数组,其中只有那些值为true的键才会在数组中结束?

E.g:

myObject = {
  option1: true,
  option2: false,
  option3: true,
  option4: true
}

变为

['option1','option3','option4']

我尝试使用_.pick(myObject, Boolean)建议使用here,但这只会产生一个空对象。我正在使用Typescript,所以如果有任何可以使用的Typescript魔法来实现这一点,我也会这样做。

3 个答案:

答案 0 :(得分:7)

lodash解决方案是使用lodash#pickBylodash#keys来获取所有真正的密钥。

var result = _(myObject).pickBy().keys().value();



var myObject = {
  option1: true,
  option2: false,
  option3: true,
  option4: true
};

var result = _(myObject).pickBy().keys().value();

console.log(result);

.as-console-wrapper{min-height:100%;top:0;}

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:6)

这很容易通过vanilla js实现。

let myObject = {
  option1: true,
  option2: false,
  option3: true,
  option4: true
}

let array = Object.keys(myObject).filter(key => myObject[key]);

console.log(array);

您可以看到一个有效的例子here

答案 2 :(得分:0)

map Lodash函数中它也处理Object而不是集合。使用lodash最简单的解决方案是使用_.reduce

哦..让我们看看_.map如何与对象一起工作:

var array = _(myObject).map((v, k)=> v && k).compact().value();

var myObject = {
  option1: true,
  option2: false,
  option3: true,
  option4: true
}
var array = _(myObject).map((v, k)=> v && k).compact().value();

console.log(array)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>

使用相同的概念,(lodashunderscore处理对象,如果你代替数组)你可以使用_.reduce函数并一次完成这个技巧:

var array = _.reduce(myObject, (i, v, k) => v && !i.push(k) || i, []);

var myObject = {
  option1: true,
  option2: false,
  option3: true,
  option4: true
}
var array = _.reduce(myObject, (i, v, k) => v && !i.push(k) || i, []);

console.log(array);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>

相关问题