2016-02-26 1 views
0

У меня есть объект словаря в JQuery, который содержит данные, как это:Невозможно удалить из словаря в JQuery

var category = []; 
var brand = []; 
var parameter = []; 

category = $("input:checkbox[name=category]:checked").map(function() { 
    return this.value; 
}).get(); 

brand = $("input[type='radio']:checked").map(function() { 
    return this.value; 
}).get(); 

parameter.push({ 
    brand: brand, 
    category: category, 
}); 

Затем я попытался удалить пару ключ значение из параметра справочник как это, но ничего не получил удалены:

var brand = "something" 
delete parameter.brand 
console.log(parameter) 

словарь параметр выглядит следующим образом

Array[2] 
0: Object 
brand: Array[1] 
0: "spykar" 
length: 1 
__proto__: Array[0] 
category: Array[1] 
0: "Men Jeans" 
length: 1 
__proto__: Array[0] 
__proto__: Object 
1: Object 
brand: Array[1] 
0: "Madame" 
length: 1 
__proto__: Array[0] 
category: Array[1] 
__proto__: Object 
length: 2 
__proto__: Array[0] 

редактировать

По Zamuka сказало мне, что я пытался фильтровать массив как этого

$table.on('click', '.remove', function() { 
       var brand = $(this).closest('td').prev('td').prev('td').html(); 
       console.log(brand) 
       $(this).closest('tr').remove(); 
       parameter = parameter.filter(isItemOk); 

       function isItemOk(item) { 
       return item.brand != brand; 
      } 

      console.log(parameter) 
     }); 

Как я могу удалить определенную марку и соответствующие категории из словаря параметров, который содержит более одной пары ключей стоимостной бренд и категории?

+1

'delete parameter [0] .brand' –

+1

Возможный дубликат [javascript найти и удалить объект в массиве на основе значения ключа] (http://stackoverflow.com/questions/21659888/javascript-find-and-remove-object-in-array-based-on-key- значение) – JJJ

+0

параметр [0] удаляет только первый ... у меня есть несколько ключевых значений пар марки и категорий @ RajaprabhuAravindasamy –

ответ

1

описать то, что элементы, которые вы хотите сохранить и фильтровать ваш массив

// if brand is string 
function isItemOk(item) { 
    return item.brand != 'something'; 
} 

parameter = parameter.filter(isItemOk); 

или

// if brand is array _that contains_ a string 
function isItemOk(item) { 
    return item.brand.indexOf('something')==-1; 
} 

или же код немного короче:

parameter = parameter.filter((item)=>item.brand!='something'); 
+0

работает нормально, но записывает данные дважды –

+0

ahh .. забыл, что jquery не дает вам массив, а массив-подобный объект. Используйте .map (someFunctionHere) .toArray() – zamuka

+0

, пожалуйста, отредактируйте свое решение –

0

Если вы хотите удалить элемент из массива, прежде всего, вы должны получить индекс этого элемента. Затем вы можете позвонить delete, но на самом деле он заменит элемент массива undefined. Чтобы полностью удалить элемент, используйте сращивание:

var arr = ['qwe', 'rty'] 
var i = arr.indexOf('qwe') 
arr.splice(i, 1); //['qwe'] 
console.log(arr); //['rty'] 

UPDATE

Вы не можете удалять из хэша-значения. Вы должны найти ключ, соответствующий значению:

parameter = { brand: 'SomeBrand', category: 'Any' } 
var brand = "SomeBrand" 

for (var key in parameter) { 
    if (parameter.hasOwnProperty(key) && parameter[key] === brand) { 
    delete parameter[key] 
    } 
} 

console.log(parameter); //Object {category: "Any"} 
+0

Но массив марки является частью параметра dict ..что я хочу здесь, чтобы удалить соответствующий бренд и category from parameter dict –

+0

Я обновил свой ответ. –

+0

он не входит в условие if, которое я попробовал console.log (параметр [key]), затем он печатает Object {brand: Array [1], category: Array [1]} –

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