2012-06-19 3 views
1

Я определил массив следующим образом:Удаление из массива на основе значения строки

var myArray = {myNewArray: ['string1' , 'string2' , 'string3']}; 

Я хочу перебрать массив и удалить элемент, который соответствует определенное значение строки. Есть ли чистый способ в jQuery/javascript для достижения этого?

Или мне нужно выполнить итерацию по каждому элементу, проверить его значение и, если его значение соответствует строке сравнения, получить свой идентификатор, а затем использовать этот id для удаления из массива?

+1

Возможный дубликат http://stackoverflow.com/questions/3596089/how-to-add-and-remove-array-value-in-jquery – sachleen

+0

Если вы не хотите использовать этот метод, http://www.w3schools.com/jsref/jsref_splice.asp –

+2

@FireLizzard https://developer.mozilla.org/ru/JavaScript/Reference/Global_Objects/Array/splice –

ответ

2

JavaScript массивы имеют indexOf метод, который может быть использован, чтобы найти элемент, то splice может быть использован, чтобы удалить его. Например:

var myNewArray = ['A', 'B', 'C']; 

var toBeRemoved = 'B'; 
var indexOfItemToRemove = myNewArray.indexOf(toBeRemoved); 
if (indexOfItemToRemove >= 0) { 
    myNewArray.splice(indexOfItemToRemove, 1); 
} 

После этого код выполняется, myNewArray является ['A', 'C'].

+0

Это немного более эффективно, чем мое решение, я думаю. Я точно не знаю, как работает 'indexOf', это может быть просто поиск по выбору! : D – Codeman

0

Вы можете фильтровать массив, используя $.grep

var myArray = {myNewArray: ['string1' , 'string2' , 'string3']}; 
myArray = { myNewArray: $.grep(myArray.myNewArray,function(val){ 
    return val !== "string1"; 
})}; 
//console.log(myArray); 
+1

Почему grep? почему бы не зойдберг? – Ohgodwhy

+0

'(V) (; ,,;) (V)' –

0
my newARR = oldArr.splice($.inArray(removeItem , oldArr) , 'deleteThisString'); 
3

Here's a JSFiddle showing your solution

var strings = ['a', 'b', 'c', 'd']; 
document.write('initial data: ' + strings); 
var index = 0; 
var badData = 'c'; 
for(index = 0; index < strings.length; index++) 
{ 
    if(strings[index] == badData) 
    { 
     strings.splice(index, 1);     
    }   
} 

document.write('<br>final data: '+ strings);​