[英]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.