假设我有一个这样的对象:
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')}'
(如果有)
谢谢。
答案 0 :(得分:6)
我将按其值过滤对象键
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"]
答案 1 :(得分:2)
我可能会在reduce
返回的数组上使用循环或Object.entries
:
循环:
const compiledLikedFoods = [];
for (const [name, value] of Object.entries(likedFoods)) {
if (value) {
compiledLikedFoods.push(name);
}
}
reduce
(因为可以将任何数组op塞入reduce
中):
const compiledLikedFoods = Object.values(likedFoods).reduce((array, [name, value]) => {
if (value) {
array.push(name);
}
return array;
}, []);
但请参阅Andrey's much simpler solution。 (悬着头。)
答案 2 :(得分:2)
您只需获取tke键并按值过滤即可。
var likedFoods = { pizza: true, pasta: false, steak: true, salad: false },
compiledLikedFoods = Object.keys(likedFoods).filter(k => likedFoods[k]);
console.log(compiledLikedFoods);
答案 3 :(得分:2)
如果 value 为true
,则可以使用for...in
遍历对象并将 key 推入数组:
var likedFoods={
pizza:true,
pasta:false,
steak:true,
salad:false
}
var compiledLikedFoods = [];
for(var o in likedFoods){
if(likedFoods[o])
compiledLikedFoods.push(o);
}
console.log(compiledLikedFoods)