繁体   English   中英

根据条件过滤 object

[英]Filter object based on condition

我有一个 object 作为

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

我想将所有真实的运动过滤成一个数组,例如[cricket,football]

按照上面的代码返回数组中的真值键,如 [cricket,football]

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

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

使用 for...in 结构:

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

关于 for...in 的更多信息: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in

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]);

您可以像这样使用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',
]

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

 const sports = { cricket:true, football:true, tennis:false, }; const result = Object.keys(sports).filter(key => sports[key]); console.log(result);

只需获取一组键( Object.keys(sports) ),然后使用 .filter() 丢弃值不true.filter()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM