2013-02-12 77 views
-2

我有一個數組:如何從jquery中的數組中刪除項目?

var menu_items = []; 

我推2個元件在這樣的:

menu_items.push({ 
        order: menu_items.length + 1, // value= 1 
        title: 'Label', 
        url: '', 
        IsSystemMenuItem: true 
       }); 

menu_items.push({ 
        order: menu_items.length + 1, // value =2 
        title: 'grid', 
        url: '', 
        IsSystemMenuItem: true 
       }); 

現在我想刪除第二項目(即,其中順序:menu_items.length + 1,//值= 2和標題:'網格')

我該如何刪除此項?

回答

3

使用delete刪除一個項目:

delete menu_items[1]; 

但是請注意,它可以讓你的數組中的一個洞。

如果你想擁有無孔陣列,使用splice

menu_items.splice(1, 1); 

如果你想要的是根據自己的屬性刪除元素,那麼你可以使用filter

menu_items = menu_items.filter(function(v) { return v.title!='grid' }); 

如果您想要更加兼容,並且在使用jQuery時,您還可以使用grep

menu_items = $.grep(menu_items, function(v) { return v.title!='grid' }); 
+0

刪除不會從數組中刪除元素,它只會將元素設置爲未定義。 – 2013-02-12 13:32:26

+0

我會建議添加一個說明'陣列。過濾器是IE9 + – Cerbrus 2013-02-12 13:38:17

+0

@Cerbrus你做到了:)(順便說一句,我鏈接到的頁面包含一個墊片) – 2013-02-13 09:24:16

0

使用此代碼

delete Your_items[1]; 
1

您可以使用splice()這一點。

menu_items.splice(1, 1); 

第一個參數是要刪除的元素的索引。第二個參數是要刪除的元素的數量。

0

如果您想通過標題去掉一個項目,我建議做這樣的事情:

function deleteItemByTitle(array, title){ 
    for(var i = 0, l = array.length; i < l; i++){ // Loop through the array, 
     if(array[i].title == title){    // If the correct element is found, 
      array.splice(i, 1);     // Remove the found element. 
      break; 
     } 
    } 
} 

然後,你可以調用該函數:

deleteItemByTitle(myArray, "grid"); 

更換titleorder ,如果你想讓它成爲搜索的財產。

0

如果您想根據訂單號或類似的方式刪除。這是它是如何完成一個基本的例子:

function DeleteFromArray(orderId) 
{ 
    for (var i = 0; i < menu_items.length; i++) 
    { 
     if(menu_items[i].order === orderId) return menu_items.splice(i, 1); 
    } 
} 

當然menu_items[i].order === orderId中可以通過類似menu_items[i].title === orderId被替換,然後就改變orderIdorderTitle或任何漂浮你的想象。