假设我有一个这样的对象:
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')}'
(如果有一个)
谢谢。
i将通过其值
过滤对象键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"]
我可能会在Object.entries
返回的数组上使用循环或reduce
:
循环:
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)的简单解决方案。(挂头)
您只需获取tke键并按值过滤。
var likedFoods = { pizza: true, pasta: false, steak: true, salad: false },
compiledLikedFoods = Object.keys(likedFoods).filter(k => likedFoods[k]);
console.log(compiledLikedFoods);
您可以使用 for...in
循环通过对象循环,然后将键推到数组,如果 value 是 true
:
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)