2013-02-12 2 views
-2

У меня есть массив:Как удалить элемент из массива в jquery?

var menu_items = []; 

я нажимаю два элемента в нем, как это:

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, // value = 2 и title: 'grid')

Как я могу удалить этот элемент ??

ответ

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

Удалить не удалит элемент из массива, он установит элемент как неопределенный. –

+0

Я бы предложил добавить примечание, что 'Array.фильтр' является IE9 + – Cerbrus

+0

@Cerbrus Вы сделали это :) (кстати, на странице, на которой я связан, содержится прокладка) –

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"); 

Replace title с order , если вы хотите, чтобы это было свойство поиска.

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, а затем просто изменить orderId к orderTitle или что-то плавает вашей фантазии.

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