cart挑战javascript逻辑。解决问题的方法不止一种吗?
我刚刚完成了代码学院的JS简介,所以我对这个有点陌生。 请看下面两段代码,一个购物车挑战。 第一个是我在网上找到的正确代码,它扫描一个已经定义的数组,然后在输入一条信息(在本例中为“项目”)时,会收到另一条信息(“价格”)的输出 以下是“正确”的解决方案:cart挑战javascript逻辑。解决问题的方法不止一种吗?,javascript,arrays,syntax,logic,this,Javascript,Arrays,Syntax,Logic,This,我刚刚完成了代码学院的JS简介,所以我对这个有点陌生。 请看下面两段代码,一个购物车挑战。 第一个是我在网上找到的正确代码,它扫描一个已经定义的数组,然后在输入一条信息(在本例中为“项目”)时,会收到另一条信息(“价格”)的输出 以下是“正确”的解决方案: //声明数组 var shoppingCart=[]; //声明函数addToCart addToCart=函数(名称、价格){ this.name=名称; 这个价格=价格; shoppingCart.push(这个.名称,这个.价格);
//声明数组
var shoppingCart=[];
//声明函数addToCart
addToCart=函数(名称、价格){
this.name=名称;
这个价格=价格;
shoppingCart.push(这个.名称,这个.价格);
};
函数价格检查(itemName){
var i=0;
对于(i;i而言,一个明显的问题是:
if(itemName===shoppingCart[i]){
您正在将itemName与包含名称和价格而不是名称的对象进行比较
我不记得这个的确切JS语法,但应该是这样的
if (itemName === shoppingCart[i].name) {
shoppingCart[i]
是一个对象,name
和price
是它的属性
您需要访问对象的属性
将itemName==shoppingCart[i]
替换为itemName==shoppingCart[i].name
,然后您可以使用shoppingCart[i]获取价格。价格
shoppingCart=[];
函数addToCart(itemName、itemPrice){
常数={
名称:itemName,
价格:项目价格
};
购物车。推(闪亮);
控制台日志(shoppingCart);
}
函数价格检查(itemName){
对于(i=0;i正确的解决方案?而不是
addToCart = function(name,price) {
这是一个未声明且不必要的函数表达式。应该执行以下操作:
function addOne(name, price){
在这里访问这个
并不是一个很好的做法,因为它会导致错误。如果您只是参考OOP代码,我将始终只使用这个
。此外,以下内容对我来说毫无意义:
shoppingCart.push(this.name,this.price);
将名称和价格添加为不同数组元素的原因。这将设置从未使用过的变量(为什么??):
因此,您的解决方案实际上比“正确”的解决方案要好。不过,有几点:
for(i=0;i<=shoppingCart.length; i++){
此外,对象通过引用进行比较,但实际上您希望通过值进行比较。例如,您可以采用name属性:
if(name === shoppingCart[i].name)
还有一个小提示,不要这样做:
}}}
我将如何做到这一点:
const cart = [];
function addToCart(name, price){
cart.push({name, price});
}
function priceOf(findName){
for(const {name, price} of cart)
if(findName === name) return price;
return NaN;
}
itemPrice在哪里定义?
}}}
const cart = [];
function addToCart(name, price){
cart.push({name, price});
}
function priceOf(findName){
for(const {name, price} of cart)
if(findName === name) return price;
return NaN;
}