【问题标题】:How to convert boolean object to array如何将布尔对象转换为数组
【发布时间】:2017-08-25 23:32:08
【问题描述】:

如何获取一个带有布尔值的简单对象并将其转换为一个数组,其中只有值为 true 的键才会出现在数组中?

例如:

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

变成

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

我尝试按照here 的建议使用_.pick(myObject, Boolean),但这只是产生了一个空对象。我正在使用 Typescript,所以如果我可以使用任何 Typescript 魔法来完成此任务,我也愿意。

【问题讨论】:

  • Object.entries(myObject).filter(([_,v]) => v).map(([k]) => k)
  • 华丽。这条评论应该是一个(和)答案!

标签: javascript typescript lodash


【解决方案1】:

使用 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

【讨论】:

  • 纯javascript的好解决方案 :) .. 但是你为什么提到vanilla js
  • 哦.. 只​​是一个别名.. 无论如何,+1 ^^
【解决方案2】:

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>

【讨论】:

    【解决方案3】:

    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>

    【讨论】:

      猜你喜欢
      • 2011-08-02
      • 1970-01-01
      • 2018-12-02
      • 2010-12-05
      • 2013-07-04
      • 1970-01-01
      • 2016-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多