Javascript 将填充布尔值的对象转换为布尔值为True的字符串数组

Javascript 将填充布尔值的对象转换为布尔值为True的字符串数组,javascript,typescript,Javascript,Typescript,假设我有一个这样的物体: likedFoods:{ pizza:true, pasta:false, steak:true, salad:false } 我想过滤掉错误并将其转换为字符串数组,如下所示: compiledLikedFoods = ["pizza", "steak"] 做这件事的最好方法是什么,不仅仅是: if (this.likedFoods.pizza == true) {this.compiledLikedFoods.push('pizza')}; if

假设我有一个这样的物体:

likedFoods:{
  pizza:true,
  pasta:false,
  steak:true,
  salad:false
}
我想过滤掉错误并将其转换为字符串数组,如下所示:

compiledLikedFoods = ["pizza", "steak"]
做这件事的最好方法是什么,不仅仅是:

if (this.likedFoods.pizza == true) {this.compiledLikedFoods.push('pizza')};
if (this.likedFoods.pasta == true) {this.compiledLikedFoods.push('pasta')}'
if (this.likedFoods.steak == true) {this.compiledLikedFoods.push('steak')}'
if (this.likedFoods.salad == true) {this.compiledLikedFoods.push('salad')}'
如果有


谢谢。

我可能会对Object返回的数组使用循环或reduce。条目:

循环:

reduce,因为任何数组op都可以插入reduce:


但是你看。挂起头部。

我可能会对Object返回的数组使用循环或reduce。条目:

循环:

reduce,因为任何数组op都可以插入reduce:


但是你看。挂起头部。

我会根据对象的值过滤对象键

const likedFoods = {
  pizza:true,
  pasta:false,
  steak:true,
  salad:false
};
const compiledFood = Object.keys(likedFoods).filter(key => likedFoods[key] === true);
console.log(compiledFood); //["pizza", "steak"]

我会根据对象的值过滤对象键

const likedFoods = {
  pizza:true,
  pasta:false,
  steak:true,
  salad:false
};
const compiledFood = Object.keys(likedFoods).filter(key => likedFoods[key] === true);
console.log(compiledFood); //["pizza", "steak"]

您可以只获取tke键并按值过滤

var likedFoods={比萨饼:正确,意大利面:错误,牛排:正确,沙拉:错误}, compiledLikedFoods=Object.keyslikedFoods.filterk=>likedFoods[k];
console.logcompiledLikedFoods 您可以只获取tke键并按值过滤

var likedFoods={比萨饼:正确,意大利面:错误,牛排:正确,沙拉:错误}, compiledLikedFoods=Object.keyslikedFoods.filterk=>likedFoods[k]; console.logcompiledLikedFoods 如果值为true,则可以使用在对象中循环并将键推送到数组:

类食品={ 比萨饼:是的, 意大利面:错, 牛排:没错, 沙拉:错 } var compiledLikedFoods=[]; 在喜欢的食物中{ iFliekedFoods[o] compiledLikedFoods.pusho; } console.logcompiledLikedFoods如果值为true,则可以使用循环遍历对象并将键推送到数组:

类食品={ 比萨饼:是的, 意大利面:错, 牛排:没错, 沙拉:错 } var compiledLikedFoods=[]; 在喜欢的食物中{ iFliekedFoods[o] compiledLikedFoods.pusho; }
console.LogCompiledLikedFoodObject.keyslikedFoods.filterkey=>likedFoods[key]==true@Andrey-这就是困扰我的原因。:-那比我的两个都干净。我会将其作为答案发布。Object.keyslikedFoods.filterkey=>likedFoods[key]==true@Andrey-这就是困扰我的原因。:-那比我的两个都干净。请注意,您的是1个循环数组,而keys+filter需要2个循环数组,因此不需要悬垂头部,这一个性能可能更高,但我没有测试它though@Andrey-谢谢。:-但你的和我的一样。你的确实需要在回调中查找对象上每个属性的值,而在我的回调中,我们已经有了值,但是查找对象上属性的值非常非常快,所以…这是一个很好的观点@Andrey,它的时间是这样的,我希望我可以检查多个答案。你的很简洁,但是如果我必须把一堆对象放入数组,我可能会使用T.J's@Logan-:-FWIW,如果必须在代码中执行此操作,我会使用Andrey的解决方案。好吧,我可能不会使用===true,但这是一个小问题。请注意,您的是1个循环数组,而keys+filter需要2个,因此不需要悬垂头部,这一个性能可能更高,但我没有测试它though@Andrey-谢谢。:-但你的和我的一样。你的确实需要在回调中查找对象上每个属性的值,而在我的回调中,我们已经有了值,但是查找对象上属性的值非常非常快,所以…这是一个很好的观点@Andrey,它的时间是这样的,我希望我可以检查多个答案。你的很简洁,但是如果我必须把一堆对象放入数组,我可能会使用T.J's@Logan-:-FWIW,如果必须在代码中执行此操作,我会使用Andrey的解决方案。嗯,我可能不会用===真的,但那是个小问题。天才!我想做一个过滤器,但出于一些愚蠢的原因,我认为它只在数组上工作,而不是对象——不考虑“.KEY”本身就是一个数组。谢谢,一旦时间限制结束,绿色检查就会出现。旁注:不需要===true,除非OP在对象中有其他要排除的truthy值。Genius!我想做一个过滤器,但出于一些愚蠢的原因,我认为它只在数组上工作,而不是对象——不考虑“.KEY”本身就是一个数组。谢谢,一旦时间限制结束,绿色检查就会出现。旁注:不需要===true,除非OP在对象中有其他要排除的truthy值。
const likedFoods = {
  pizza:true,
  pasta:false,
  steak:true,
  salad:false
};
const compiledFood = Object.keys(likedFoods).filter(key => likedFoods[key] === true);
console.log(compiledFood); //["pizza", "steak"]