2016-02-07 2 views
9

Что является самым простым способом удалить все элементы из массива, соответствующие определенной строке? Например:Удалить все элементы из массива, которые соответствуют определенной строке

array = [1,2,'deleted',4,5,'deleted',6,7];

Я хочу, чтобы удалить все 'deleted' из массива.

ответ

33

Просто используйте функцию Array.prototype.filter() для получения элементов состояния

var array = [1,2,'deleted',4,5,'deleted',6,7]; 
var newarr = array.filter(function(a){return a !== 'deleted'}) 
+11

Это даже лучше, с синтаксисом стрелкой. 'array.filter (a => a! == 'deleted');' –

+0

Как бы вы могли изменить это, если хотите удалить элементы, содержащие часть вашего поискового запроса? 'возьмите этот массив [1, 2, 'delete', 4, 5, 'deleted', 6, 'удалит']'. Что делать, если нужно удалить любой элемент, который соответствует даже части строки del? Так что «удалить», «удалить» и «удалить» все удалены? – user1837608

+0

@ user1837608 в этот момент вам будет безопаснее иметь дело с соответствием регулярному выражению, чем стандартное соответствие, или совпадение на n элементах строки, но это будет дорогостоящей операцией без реальной выгоды в этот момент, так как это будет загромождать себя " удалит ", при необходимости я могу разместить ответ для этого ниже, но не соответствует прямому вопросу, который я считаю. –

4
array = array.filter(function(s) { 
    return s !== 'deleted'; 
}); 
1

Если вы хотите, тот же массив, то вы можете использовать

var array = [1,2,'deleted',4,5,'deleted',6,7]; 
var index = "deleted"; 
for(var i = array.length - 1; i >= 0; i--) { 
    if(array[i] === index) { 
     array.splice(i, 1); 
    } 
} 

EXAMPLE 1

еще вы можете использовать Array.prototype.filter, который создает новый массив со всеми элементами, которые проходят тест, реализованный предоставленной функцией.

var arrayVal = [1,2,'deleted',4,5,'deleted',6,7]; 
function filterVal(value) { 
    return value !== 'deleted'; 
} 
var filtered = arrayVal.filter(filterVal); 

EXAMPLE 2

3

Если у вас есть несколько строк, чтобы удалить из основного массива, Вы можете попробовать это

// Your main array 
var arr = [ '8','abc','b','c']; 

// This array contains strings that needs to be removed from main array 
var removeStr = [ 'abc' , '8']; 

arr = arr.filter(function(val){ 
    return (removeStr.indexOf(val) == -1 ? true : false) 
}) 

console.log(arr); 

// 'arr' Outputs to : 
[ 'b', 'c' ] 
Смежные вопросы