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

5

如何将一个具有布尔值的简单对象转换为数组,只有那些值为 true 的键才会出现在数组中?

例如:

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

变为

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

我尝试使用建议这里_.pick(myObject, Boolean),但它只是产生了一个空对象。我正在使用TypeScript,如果有任何可以帮我完成此任务的TypeScript技巧,我也可以尝试。


7
Object.entries(myObject).filter(([_,v]) => v).map(([k]) => k) 翻译为:获取对象 myObject 中值不为空的键值对,并返回所有键组成的数组。具体实现为:先将 myObject 转换为由键值对组成的数组,然后使用 filter 方法筛选值不为空的键值对,最后使用 map 方法只保留键名组成的数组。 - Joe Frambach
华丽。这个评论应该是(并且是)答案! - shabs
3个回答

12

使用纯JavaScript很容易实现此操作。

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

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

console.log(array);

你可以在这里看到一个工作示例。


很好的解决方案,使用纯JavaScript :) .. 但是为什么你提到了“vanilla js”? - Koushik Chatterjee
哦,只是一个别名而已。无论如何,+1 ^^ - Koushik Chatterjee

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>


0
Lodashmap 函数中,它也可以处理对象,而不仅仅是集合。使用 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>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接