我刚刚完成了代码学院的JS简介,所以我对此有点新鲜。 请查看购物车挑战赛的以下2段代码。 第一个是我在网上找到的正确代码,其中它扫描已定义的数组,然后输入一条信息(在本例中为“item”)另一条信息的输出(“price”)收到了。
以下是“正确”的解决方案:
// Declare Array
var shoppingCart = [];
// Declare function addToCart
addToCart = function(name,price) {
this.name = name;
this.price = price;
shoppingCart.push(this.name,this.price);
};
function priceCheck(itemName) {
var i = 0;
for(i; i <= shoppingCart.length; i++) {
if(itemName === shoppingCart[i]) {
console.log(shoppingCart[i += 1]);
break;
}
else {console.log("the searched item is not in the shopping cart");}
}
}
如你所见,这个人用过.this。
在我的代码中,我刚刚添加了一个对象(就像被指示的那样)。 我的逻辑是完全关闭的,还是我只需要做一些修理?
我的代码:
shoppingCart = [];
function addToCart(itemName, itemPrice){
const shiny = {
name: itemName,
price: itemPrice
};
shoppingCart.push(shiny);
console.log(shoppingCart);
}
function priceCheck(itemName){
for(i=0;i<=shoppingCart.length; i++){
if(itemName===shoppingCart[i]){
return itemPrice;
} else{
console.log('item isnt in cart');
}}}
addToCart('apple',20);
console.log(shoppingCart);
priceCheck('apple');
它工作正常,直到达到priceCheck('apple'); - 然后它看起来我在阵列中找不到'apple'。
我试着理解我是否需要使用(.this),如果我能按照我写的方式去做。
PS - 对不起,如果它一团糟,我有点难以解释我试图理解的东西:) PSS - 我不只是想解决这个挑战,而是真正开发出“问题的编码思维”。THX!
答案 0 :(得分:1)
“正确”的解决方案?而不是。
addToCart = function(name,price) {
这是未声明的和不必要的函数表达式。人们应该这样做:
function addOne(name, price){
在这里访问this
并不是一个好的做法,因为它具有误导性。如果您只是引用OOP代码,我将始终只使用this
。另外,以下内容对我没有意义:
shoppingCart.push(this.name,this.price);
因为将名称和价格添加为不同的数组元素。这设置了从未使用过的变量(为什么??):
this.name = name;
this.price = price;
因此,您的解决方案实际上比“正确”的IMO更好。但是有一些事情:
for(i=0;i<=shoppingCart.length; i++){
迭代直到i
等于长度,但由于数组为零,因此该位置没有元素。做:
for(let i = 0; i < shoppingCart.length; i++)
此外,通过引用比较对象,但实际上您希望按值比较它们。例如。你可以取名称属性:
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;
}
答案 1 :(得分:0)
这里有一个明显的问题:
if(itemName===shoppingCart[i]){
您将itemName与包含名称和价格的对象进行比较,而不是名称。
我不记得确切的JS语法,但它应该像
if (itemName === shoppingCart[i].name) {
答案 2 :(得分:0)
shoppingCart[i]
是一个对象,name
和price
是其属性。
您需要改为访问对象的属性。
将itemName == shoppingCart[i]
替换为itemName == shoppingCart[i].name
,然后您可以使用shoppingCart[i].price
shoppingCart = [];
function addToCart(itemName, itemPrice){
const shiny = {
name: itemName,
price: itemPrice
};
shoppingCart.push(shiny);
console.log(shoppingCart);
}
function priceCheck(itemName){
for(i=0;i<=shoppingCart.length; i++){
if(itemName===shoppingCart[i].name){//here
return shoppingCart[i].price;//here
} else{
console.log('item isnt in cart');
}}}
addToCart('apple',20);
console.log(shoppingCart);
console.log(priceCheck('apple'));