如何根据其值过滤对象的属性?

时间:2019-11-26 16:04:41

标签: javascript

假设我有一个称为颜色的对象,

const colors = {
  green: "yes",
  red: "no",
  yellow: "yes"
};

现在,如何获取基于值的结果。像,对象应排除具有“否”的值。 以下是理想的结果:

colors = {
  green: "yes",
  yellow: "yes"
};

我的尝试

Object.keys(colors).filter(c => { if(colors[c]==="yes"){ return arr4.push(colors)}})

4 个答案:

答案 0 :(得分:1)

首先,请尝试格式化问题以提高可读性。

您可以使用本机JS函数过滤对象。见下文:

const colors = {
  green: 'yes',
  red: 'no',
  yellow: 'yes'
}

const filtered = Object.keys(colors)
  .filter(key => colors[key] === 'yes')
  .reduce((obj, key) => {
    obj[key] = colors[key];
    return obj;
  }, {});

这将返回一个对象

{green: "yes", yellow: "yes"}

答案 1 :(得分:1)

简单且希望易于理解:

const colors = {
  green: "yes",
  red: "no",
  yellow: "yes",
};

for (const key of Object.keys(colors)) {
  if (colors[key] === "no") {
    delete colors[key];
  }
}

这对于新的fromEntries()方法也是一个很好的用例。如果您喜欢冒险,请尝试以下方法:

const colors = {
  green: "yes",
  red: "no",
  yellow: "yes",
};

const newColors = Object.fromEntries(
  Object.entries(colors)
    .filter(([key, value]) => value === "yes")
);

它具有保持原始对象不变的附加好处,尽管我发现它比我的第一个建议更难读。

答案 2 :(得分:0)

尝试:

const colors = {
  green: 'yes',
  red: 'no',
  yellow: 'yes'
}

let result = {}
Object.keys(colors).map((key) => { if(colors[key] == 'yes')  result[key] = colors[key]})
console.log(result)

答案 3 :(得分:0)

const colors = {
     green:"yes",
     red:"no",
     yellow:"yes"
}
let filteredColors = {}

let filteredKeys = Object.keys(colors).filter(key => {
    return key==="yes"
})

filteredKeys.map(key => {
    filteredColors[key] = "yes"
})