如何使用布尔值取一个简单的对象并将其转换为一个数组,其中只有那些值为true的键才会在数组中结束?
E.g:
myObject = {
option1: true,
option2: false,
option3: true,
option4: true
}
变为
['option1','option3','option4']
我尝试使用_.pick(myObject, Boolean)
建议使用here,但这只会产生一个空对象。我正在使用Typescript,所以如果有任何可以使用的Typescript魔法来实现这一点,我也会这样做。
答案 0 :(得分:7)
lodash解决方案是使用lodash#pickBy
和lodash#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;
答案 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>
使用相同的概念,(lodash
和underscore
处理对象,如果你代替数组)你可以使用_.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>