[英]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.