输出对象键名,当对象键值大于5时。

8
var veg = {"mushroom": 30, "pepper": 60, "corn": 1, "carrot": 
2, "pumpkin": 4}

如果对象的值大于5,则打印出所有来自“veg”的键。我似乎无法弄清楚如何在我的代码中放置if语句条件。

通过使用for循环遍历对象,我获取了所有的值和键。

function getKey(veg){
  var arr = [];
  for (var x of Object.keys(veg)){
    arr.push(x);
  }
  return arr;
}

console.log(getKey(veg))

//----------------------------------------

function getVal(veg){
  var arr = [];
  for (var i of Object.values(veg)){
    arr.push(i);
  }
  return arr;
}

console.log(getVal(veg))

// END GOAL

must return ["mushroom", "pepper"]

1
顺便提一下,Object.keysObject.values已经返回数组了。使用for...in遍历数组几乎总是错误的。你的代码生成包含数字的数组。 - Felix Kling
是的,我完全忘记了,谢谢。必须在for循环中使用“of”。 - swiftly
4个回答

8

使用 for in 方法

var veg = {"mushrooms": 30, "peppers": 60, "meatballs": 1, "chicken": 
2, "olives": 4}
            
function getKey(veg){
  const arr = [],
  obj = Object.keys(veg);
  for (var x in obj){
    if(veg[obj[x]] > 5){
      arr.push(obj[x]);
    }
  }
  return arr;
}

console.log(getKey(veg))

使用方法 forEach

var veg = {"mushrooms": 30, "peppers": 60, "meatballs": 1, "chicken": 
2, "olives": 4}

function getKey(veg){
  const arr = [];
  Object.keys(veg).forEach(function(item){
    if(veg[item] > 5) arr.push(item);
  }); 
  return arr;
}

console.log(getKey(veg));

使用 filter 方法

var veg = {"mushrooms": 30, "peppers": 60, "meatballs": 1, "chicken": 
2, "olives": 4}


function filterItems(arr) {
  return Object.keys(arr).filter(function(el) {
      return arr[el] > 5;
  })
}

console.log(filterItems(veg));

var veg = {"mushrooms": 30, "peppers": 60, "meatballs": 1, "chicken": 
2, "olives": 4}

function filterItems(arr) {
  return Object.keys(arr).filter(el => arr[el] > 5);
}

console.log(filterItems(veg));


不太符合我的要求,结果给出的是索引。它应该返回 ["mushroom", "pepper"] 而不是 [ '0', '1' ]。 - swiftly
@Юрий Светлов,非常感谢您提供的解决方案。即使过去了三年,它仍然有用。 - Wafie Ali

3

只需使用 filtermapObject.entries

var veg = {
  "mushroom": 30,
  "pepper": 60,
  "corn": 1,
  "carrot": 2,
  "pumpkin": 4
};
var keys = Object.entries(veg).filter(([, v]) => v > 5).map(([k]) => k);
console.log(keys);


1

Object.getOwnPropertyNames会返回一个对象上的属性数组,filter返回一个数组,其中从输入函数传入的数组项返回true,在本例中大于5。

var veg = {"mushroom": 30, "pepper": 60, "corn": 1, "carrot": 2, "pumpkin": 4};

console.log(Object.getOwnPropertyNames(veg).filter(prop => veg[prop] > 5));


你选择使用 Object.getOwnPropertyNames 而不是像 OP 中使用 Object.keys(),有什么原因吗? - Mark
Does it matter? - Adrian Brand

1
你应该使用一个 for-in 循环来遍历对象:

const veg = {"mushroom": 30, "pepper": 60, "corn": 1, "carrot": 2, "pumpkin": 4};

const out = [];

for (let key in veg) {
  if (veg[key] > 5) out.push(key);
}

console.log(out);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接