繁体   English   中英

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

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

我的下面的代码有问题,但是我无法弄清楚为什么我的测试没有通过。

例如,如果我通过canIGet('MacBook Air', 100); 这必须返回false ,但是返回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) {} ...

我想比较一下,该项目传递与itemPrices对象中的键相同。

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

在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)返回true的原因是,您的第一个if语句为true,因此函数返回true。

第一个if语句本质上是这样的:

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

这是true因此您的函数然后返回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)); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM