将填充布尔值的对象转换为布尔值为真实的弦乐阵列



假设我有一个这样的对象:

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)

最新更新