获取值为true的JavaScript对象的所有键

时间:2014-10-28 20:39:27

标签: javascript underscore.js

我有对象pks,并希望提取值为true的所有键。

pks = {3: false, 7: true, 2: true}

是否有可以返回[7, 2]的下划线功能?我已经尝试了_.invert但是我在这个过程中丢失了一个值,所以我正在寻找替代方案。

5 个答案:

答案 0 :(得分:7)

您可以使用内置函数执行此操作,无需使用Underscore:

Object.keys(pks)
  .filter(function(k){return pks[k]})
  .map(Number)

答案 1 :(得分:3)

试试这个:

_.reduce(pks, function(memo, val, key){
  if (val) memo.push(key);
  return memo;
}, []);

答案 2 :(得分:0)

据我所知,没有一个下划线功能可以专门做到这一点,但有一种方法你可以自己做:

function getTrueKeys(obj) {
   var ret = [];
   for (var key in obj) {
      if (obj.hasOwnProperty(key) && obj[key] === true) {
         ret.push(key);
      }
   }
   return ret;
}

答案 3 :(得分:0)

<强> Lodash:

_.compact(_.map(pks, function(value, prop) {
  if(value) {
    return prop;
  }
}));

答案 4 :(得分:0)

我将使用Object.entries(),filter()和map():

const pks = {3: false, 7: true, 2: true};

const trueKeys = Object.entries(pks).filter(([_, v]) => v).map(([k, _]) => +k);

console.log(trueKeys);