返回 object.keys 并将其与 JavaScript 中的函数参数进行比较

Returning an object.keys and comparing it to a function argument in JavaScript

我在使用下面的代码时遇到问题,但我不明白为什么我的测试没有通过..

例如,如果我通过 canIGet('MacBook Air', 100); 这必须 return false,而是 returning true

var canIGet = function(item, money) {
  itemPrices = {
   'MacBook Air': 999,
   'MacBook Pro': 1299,
   'Mac Pro': 2499,
   'Apple Sticker': 1  
  }

  if (itemPrices["MacBook Air"] >= money) {
    console.log(itemPrices["MacBook Air"], item, money);
    return true;
  } else if (itemPrices["MacBook Pro"] >= money)  {
    return true;
  } else if (itemPrices["Mac Pro"] >= money) {
    return true;
  } else if (itemPrices["Apple Sticker"] >= money) {
    return true;
  }  else {
    return false;
  }
};

我的问题是,我是否应该这样做:

...
if (itemPrices.MacBookAir == item && itemPrices["MacBook Air"] >= money) {} ...

我想比较一下item pass和itemPrices'对象里面的key是一样的

JsBin link;最后一个功能在底部。

在您的 if 语句中,您正在手动比较 itemPrices 中的每个键。没有必要这样做 - 您已经将正确的键作为变量传递给函数 (item)。您可以只使用该变量来获取对象中的正确键:itemPrices[item]。现在您知道了用户要求的商品的价格。然后你只需将它与 price 变量进行比较。

所以你可以删除所有这些 if 语句并将其全部替换为:

return itemPrices[item] <= money;

如果您只是想看看您是否能负担得起 itemPrices 对象中的一种产品,那么也许您应该这样做:

function canIGet(item, money) {
  itemPrices = {
   'MacBook Air': 999,
   'MacBook Pro': 1299,
   'Mac Pro': 2499,
   'Apple Sticker': 1  
  }
  // if we match an item in the prices object and the passed in 
  // money value is greater or equal to the price, then return true
  // otherwise return false
  return itemPrices[item] && money >= itemPrices[item];
}

你在当前函数中的逻辑有点倒退,canIGet('MacBook Air', 100) returns 为真的原因是你的第一个 if 语句是真的,因此你的函数returns 正确。

第一个 if 声明基本上是这样的:

if (itemPrices["MacBook Air"] >= 100) {

true 所以你的函数然后 returns true 这似乎是落后的逻辑。但是,无论如何都没有理由检查所有项目。大概您只想检查传递的项目,您可以使用 itemPrices[item].

执行上述操作

我愿意;

var itemPrices = {
                    'MacBook Air': 999,
                    'MacBook Pro': 1299,
                        'Mac Pro': 2499,
                  'Apple Sticker': 1  
                 },
       canIGet = (o,p,v) => o[p] <= v;

console.log(canIGet(itemPrices,'MacBook Air',100));