返回 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));
我在使用下面的代码时遇到问题,但我不明白为什么我的测试没有通过..
例如,如果我通过 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));