2013-03-15 2 views
1
var arr = [["test","1"],["demo","2"]]; 

// $.inArray() ??? 
// .splice() ??? 
// $.each() ??? 

$("code").html(JSON.stringify(arr)); 

Если я найду соответствие массива по «тесту» (уникальным) ключевым словом, удалю ["test","1"]Как найти массив в массиве и удалить его?

Так arr после удалено будет [["demo","2"]]

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

площадка:http://jsbin.com/ojoxuy/1/edit

ответ

2

Это то, что filter для:

newArr = arr.filter(function(item) { return item[0] != "test" }) 

, если вы хотите изменить существующий массив вместо того, чтобы создать новый, просто назначьте его обратно:

arr = arr.filter(function(item) { return item[0] != "test" }) 

Методы модификатора, такие как splice сделать код труднее t o читать и отлаживать.

+0

!!!! Большое спасибо !!!. '.filter()' – l2aelba

+2

Отличное решение, но помните о требовании ECMAScript 5th Edition. И технически он всегда создает новый массив. – zeroflagL

1

Вы могли бы сделать что-то вроде этого:

function remove(oldArray, itemName) { 
    var new_array = []; 

    for(var i = 0, len = oldArray.length; i < len; i++) { 
     var arr = oldArray[i]; 

     if (arr[0] != itemName) new_array.push(arr); 
    } 

    return new_array; 
} 

И называть это так:

var arr = [["test","1"],["demo","2"]]; 
var new_arr = remove(arr,'test'); 

Я делаю предположения здесь и не делать какие-либо реальная проверка ошибок, но вы получаете эту идею.

+0

Могу ли я использовать удалить из 'arr', не сделать новый массив? , Спасибо в любом случае – l2aelba

+0

Нет, не изменяя объект Array. Проверьте ответ Хорхе, 'splice()' может быть лучшим решением. – Lloyd

+0

Хорошо, но так много спасибо: D – l2aelba

1

Может быть что-то вроде:

for(var i = 0; i < arr.length; i++) { 
    if(arr[i][0] == "test") { 
    arr.splice(i, 1); 
    break; 
    } 
} 
+0

work: D спасибо огромное – l2aelba

+0

Я забыл про 'splice()' :) – Lloyd

+0

@Lloyd Не забудьте отметить один из этих ответов как правильный. –

0

Проверить это один

function rmEl(a,v) 
{ 
for(var i=0;i<a.length;i++) 
    { 

     if(a[i][0]==v) 
     { 
     a.splice(i,i+1); 
     i=-1; 
     } 
     $("code").html(JSON.stringify(a));  
    } 
return a; 
} 
0
var arr = [["test","1"],["demo","2"]]; 

function checkArrayElements(a, index, arr) { 
    if(a[0]=="test"){ 
    delete arr[index]; 
    arr.splice(index,index+1); 
    } 
} 
arr.forEach(checkArrayElements); 
$("code").html(JSON.stringify(arr)); 

ПРИМЕЧАНИЕ: Это удаляет любой внутренний массив в обр с 0 элементного = «тест»

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