Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
cart挑战javascript逻辑。解决问题的方法不止一种吗?_Javascript_Arrays_Syntax_Logic_This - Fatal编程技术网

cart挑战javascript逻辑。解决问题的方法不止一种吗?

cart挑战javascript逻辑。解决问题的方法不止一种吗?,javascript,arrays,syntax,logic,this,Javascript,Arrays,Syntax,Logic,This,我刚刚完成了代码学院的JS简介,所以我对这个有点陌生。 请看下面两段代码,一个购物车挑战。 第一个是我在网上找到的正确代码,它扫描一个已经定义的数组,然后在输入一条信息(在本例中为“项目”)时,会收到另一条信息(“价格”)的输出 以下是“正确”的解决方案: //声明数组 var shoppingCart=[]; //声明函数addToCart addToCart=函数(名称、价格){ this.name=名称; 这个价格=价格; shoppingCart.push(这个.名称,这个.价格);

我刚刚完成了代码学院的JS简介,所以我对这个有点陌生。 请看下面两段代码,一个购物车挑战。 第一个是我在网上找到的正确代码,它扫描一个已经定义的数组,然后在输入一条信息(在本例中为“项目”)时,会收到另一条信息(“价格”)的输出

以下是“正确”的解决方案:

//声明数组
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;
  }