2017-02-12 2 views
0

В настоящее время я изучаю JavaScript и весь свой тестовый проход, но одна из моих функций не работает должным образом.JavaScript for-loop не возвращает элемент, и тест не проходит

Вот тест

it("should get record by its id", function(){ 
    customer1.setFunds(100); 
    customer1.buy(record1, store1); 
    customer1.buy(record2, store1); 
    var item = customer1.getRecord("xyz123"); 
    console.log(customer1); 
    is.equal("Nirvana", item.artist); 
}), 

Вот объект

record2 = new Record("Nirvana", "In Utero", 25, 11, "xyz123");//the last attribute is the id 

Вот функция Я тестирую

getRecord: function(id){ 
for(var i = 0; i<this.boughtItems.length; i+=1){ 
if(this.boughtItems[i].id === id){ 
    return this.boughtItems[i]; 
}else{ 
    return "The item doesn't exist"; 
} 
} 

Дело в том, что this.boughtItems состоит из этого элемента I я ищу, и функция не может вернуть его. Я знаю, что объекты JS иногда работают странно, но это очень расплывчато для меня. Если я не слепой и не вижу простой проблемы, происходящей там

Спасибо!

обновить запись не имеет каких-либо функций, возложенных на него, только атрибуты

var Record = function(artist, title, price, stock, id){ 
this.artist = artist; 
this.title = title; 
this.price = price; 
this.stock = stock; 
this.id = id; 
}; 

UPDATE2 метод покупки()

buy: function(product, store){ 
if(this.funds >= product.price){ 
    store.sell(product); 
    var itemToBuy = new Record(product.artist, product.title, product.price, 1, product.id); 
    this.boughtItems.push(itemToBuy); 
    this.funds -= itemToBuy.price; 
}else{ 
return "You cannot afford to buy this item"; 
    } 
} 

и это даже страннее, в моих тестах, Объект «item» появляется как «Вы не можете позволить себе купить этот товар»

+1

Можем ли мы увидеть прототип класса «Запись», который вы используете? – forrestmid

+0

обновлено :) спасибо! – bwielk

+1

Можем ли мы увидеть метод 'buy()' для клиента? –

ответ

0

Вам нужно вытащить ваш, если из вашего цикла for. Теперь он возвращает «Элемент не существует» после первого элемента.

getRecord: function(id) { 
for(var i = 0; i<this.boughtItems.length; i+=1) { 
    if (this.boughtItems[i].id === id) { 
     return this.boughtItems[i]; 
    } 
} 
return "The item doesn't exist"; 
+0

все сработало, но ... как? – bwielk

+0

В вашем случае был проверен только первый элемент вашего массива. Если первый элемент был прав, чем тот, который возвратил этот объект, но когда он терпит неудачу, он возвращается «Элемент не существует». Поскольку вы возвращаете что-то в своем for-loop, он прекращает итерацию. Вы можете проверить это, зарегистрировав 'index' в своем for-loop – bmooij

+0

спасибо за подсказку! Я думаю, мне нужно быть более осторожным с поведением петель – bwielk

Смежные вопросы