2014-10-11 4 views
0

Я попытался удалить несколько записей в массиве.Удаление определенных элементов (объектов) внутри массива

Эти записи являются объектами, и мне нужно найти объект, отвечающий определенным критериям.

var pending = []; 
    a.forEach(function(entry, index) { 
     if(entry.b == data) { 
      pending.push(index); 
     } 
    }); 
    pending.forEach(function(entry) { 
     a.splice(entry, 1); 
    }); 

Проблема заключается в том, что он удаляет только половину того, что я хочу (когда b = data) и даже удаляет некоторые случайные записи ...

Спасибо за помощь.

+0

Что находится в 'a', что такое' data'? Что вы пытаетесь сохранить, показать нам какой-то релевантный (хотя и упрощенный) код с заполненными переменными? –

+0

Возможно, вы получаете ложные срабатывания от вашего нестандартного сравнения сравнений. Вы прошли через это в отладчике? –

+1

С каждым 'splice()' индексы в 'a' shift для всего'> entry', поэтому следующая 'entry' отключена на 1, затем на 2 и т. Д. Посмотрите на' '.filter()'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter). –

ответ

2

Я предполагаю, что a - это массив объектов, которые вы хотите фильтровать, чтобы сохранить только те, чье свойство b равно строке 'data'. В таком случае:

// this outputs to the console, you should probably press 'F12' 
 
var a = [{ 
 
    'b': 'data' 
 
    }, { 
 
    'b': 'something else' 
 
    }, { 
 
    'b': 'data' 
 
    }, { 
 
    'b': 50 
 
    }], 
 
    pending = a.filter(function(elem) { 
 
    return elem.b === 'data'; 
 
    }); 
 

 
console.log(pending);

Ссылки:

+0

Так что, в основном, я должен переделать массив, где я сохраню сообщение, которое я хочу? – cloud1250000

+0

Отлично! он отлично работает! Я сделал это в ожидание = a.filter (функция (эль) {! \t возвращения elem.b = данные; \t \t \t}); \t \t \t a = ожидает; – cloud1250000

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