2017-03-13 37 views
0

我正在開發一個Javascript練習,它需要一個可以搜索數組中某個特定對象的函數。如果存在這樣的對象,該函數應該刪除該對象,然後返回該數組。如果數組中不存在這樣的對象,則該函數應返回一個字符串,表示該對象不存在。如何在數組中找到對象,然後刪除它並返回數組?

到目前爲止,我已經寫下了下面的代碼,以購物車爲例,但是我沒有得到期望的結果。如果我在購物車[0]上搜索對象,它會按預期工作。但是,索引大於0的任何內容都會返回「該項目不在您的購物車中」。我究竟做錯了什麼?

var cart = [{apples: 12}, {oranges: 20}, {grapes: 35}, {peaches: 18}] 

function removeFromCart(item){ 

    for (var i = 0; i < cart.length; i++){  
    if (cart[i].hasOwnProperty(item)) { 
     cart.splice(i, 1); 
     return cart; 
    } 
    else { 
     return "That item is not in your cart."; 
    } 
    } 
    } 
+0

呦你可能想看看[Array#filter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)。 – elclanrs

+0

@trincot - 當然會的,因爲它沒有在'cart'上被調用。 – nnnnnn

+0

無論如何,你的循環是壞的,可以說你想刪除的項目是數組中的第二個,當它開始循環時,第一個項目會轉到else,並且因爲return語句而停止循環,所以它永遠不會經歷所有這些。 – noitse

回答

1

的問題是,在你的循環的第一次迭代,如果if條件是不正確的,將立即做else條件和return。在循環之後擺脫else並將第二個return聲明移動到- 這樣,僅在檢查每個項目後才應用「未找到」條件。

var cart = [{apples: 12}, {oranges: 20}, {grapes: 35}, {peaches: 18}] 
 

 
function removeFromCart(item){ 
 
    for (var i = 0; i < cart.length; i++){  
 
    if (cart[i].hasOwnProperty(item)) { 
 
     cart.splice(i, 1); 
 
     return cart; 
 
    } 
 
    } 
 
    // not found: 
 
    return "That item is not in your cart."; 
 
} 
 

 
console.log(removeFromCart("grapes"));

順便說一句,它返回有時陣列和串其他時間可以是有點混亂一起工作的功能。鑑於你的函數正在更新在函數外部定義的變量,我更傾向於返回一個空字符串以獲得成功,並返回一個錯誤字符串以表示失敗。

0

希望這將是usefule

var cart = [{ 
    apples: 12 
}, { 
    oranges: 20 
}, { 
    grapes: 35 
}, { 
    peaches: 18 
}] 

function removeFromCart(item) { 
    cart.forEach(function(elem, index) { 
    if (elem.hasOwnProperty(item)) { 
     cart.splice(index, 1); 
    } 
    }) 
    return cart; // return the array 
} 

console.log(removeFromCart('apples')) 

DEMO

在我的選擇,最好不要修改循環內AAN陣列,事實上你CNA使用過濾功能,而不修改原始數組,可以resued

function removeFromCart(item) { 

var _x = cart.filter(function(elem){ 
    return !elem.hasOwnProperty(item) 
    }) 
return _x 
} 

console.log(removeFromCart('apples')) 

DEMO

相關問題