根据条件过滤对象

时间:2020-05-11 16:35:50

标签: javascript

我有一个对象

sports={
   "cricket":true,
   "football":true,
   "tennis":false
}

我想将所有正确的运动项过滤到[cricket,football]

这样的数组中

5 个答案:

答案 0 :(得分:2)

下面的代码返回[cricket,football]之类的数组中真值的键

const sports = {
  cricket: true,
  football: true,
  tennis: false,
};

const result = Object.keys(sports).filter((current) => {
  return sports[current];
});

答案 1 :(得分:1)

在结构中使用for ...:

sports={
   cricket:true,
   football:true,
   tennis:false
}
const result = []
for(const sport in sports) {
 if (sports[sport]) result.push(sport)
}
console.log(result)

有关...的更多信息,请访问:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in

答案 2 :(得分:1)

var sports_arr = Object.keys(sports);
var tmp = [];
for(var i = 0; i < sports_arr.length && sports[sports_arr[i]]; i++)
  tmp.push(sports_arr[i]);

答案 3 :(得分:1)

您可以像这样使用Object.entries()Array.prototype.filter()Array.prototype.map()

const sports = {
   cricket:true,
   football:true,
   tennis:false,
};

console.log(Object.entries(sports).filter(([key, value]) => value).map(([key, value]) => key));

Object.entries()返回具有键值对的数组:

[
  ['cricket', true],
  ['football', true],
  ['tennis', false],
]

然后您可以检查每个条目的第二个元素以过滤掉false的那些元素:

[
  ['cricket', true],
  ['football', true],
]

然后使用map仅保留第一个元素:

[
  'cricket',
  'football',
]

答案 4 :(得分:1)

如@ David784在评论中所述,这是最简单的解决方案。无需进一步复杂化:

const sports = {
   cricket:true,
   football:true,
   tennis:false,
};

const result = Object.keys(sports).filter(key => sports[key]);
console.log(result);

仅获取键数组(Object.keys(sports)),然后使用true丢弃键值不为.filter()的键。