2013-11-29 4 views
0

У меня есть два массива, как это,Как удалить элементы массива в javascript?

arr1 = ['20', 'annL', 'annT', '25', 'annL', 'annT', '44', 'annL', 'annT'] 

arr2 = ['2013-11-29','50','annL','annT', '20','annL','annT', '25','annL','annT', '44','annL','annT', '96','annL','annT', '26','annL','annT', '10','annL','annT'] 

Я хочу, чтобы удалить arr1 элементы из arr2.

Я использовал,

array.splice() 

, но не смог в состоянии решить проблему

Пожалуйста, помогите мне,

Спасибо.

+0

Внедрение операции с дополнительным набором дополнений ... –

+0

Если вы спешите, есть множество полезных библиотек-утилиты, таких как lodash и подчеркивание, которые предоставляют функциональность, например массив # diff: http://lodash.com/docs#difference –

ответ

0

Помогает ли это?

for (var i in arr1) { 
    var elemPos = arr2.indexOf(arr1[i]); 
    while (-1 !== elemPos) { 
     arr2.splice(elemPos, 1); 
     elemPos = arr2.indexOf(arr1[i]); 
    } 
} 
+0

Примечание: 'indexOf' на массивах были сначала добавлены в IE9 +. Проверьте [this] (http: // stackoverflow.com/questions/1744310/how-to-fix-array-indexof-in-javascript-for-ie-browsers) для методов совместимости. – h2ooooooo

+0

@ h2ooooooo Я этого не знал. Благодарю. – matewka

+0

Спасибо, я проверю – user2879220

3

использовать фильтр

Array.prototype.difference = function(arr) { 
    return this.filter(function(i) {return (arr.indexOf(i) == -1);}); 
} 

Использование

arr2.difference(arr1); 

[1,2,3,4].difference([1,2]) 
// => [3,4] 

Sidenote

Я думаю, что это выглядит довольно в кофе Сценарий как хорошо:

Array::difference = (arr) -> 
    @filter (i) -> 
    arr.indexOf(i) is -1 
+1

Хорошо. Обратите внимание, что в отличие от «хэш-решений» это работает с любым типом (т. Е. Массивами объектов). – georg

+0

Спасибо, я проверю – user2879220

+0

Отличный дайте мне знать :) если есть что-то, что нуждается в разъяснении, просто скажите – Niall

0

Следующая difference функция, если из этой библиотеки: array.sets.js

Эта библиотека обеспечивает 6 основных операций набора.

Array.prototype.difference = function(a) { 
     var temp = []; 
     var keys = {}; 
     for (var i = 0; i < this.length; i++) { 
       keys[this[i]] = 1; 
     } 
     for (var i = 0; i < a.length; i++) { 
       if (keys[a[i]] != undefined) { 
         keys[a[i]] = 2; 
       } 
     } 
     for (var key in keys) { 
       if (keys[key] == 1) { 
         temp.push(key); 
       } 
     } 
     return temp; 
}; 

arr1 = ['20', 'annL', 'annT', '25', 'annL', 'annT', '44', 'annL', 'annT']; 

arr2 = ['2013-11-29','50','annL','annT', '20','annL','annT', '25','annL','annT', '44','annL','annT', '96','annL','annT', '26','annL','annT', '10','annL','annT']; 

console.log(arr2.difference(arr1)); 

Выход:

["2013-11-29", "50", "96", "26", "10"] 
+0

Спасибо, я проверю – user2879220

0

Вот еще одно решение:

arr1.forEach(
    function(item){ 
     var itemIndex = arr2.indexOf(item); 
     if(itemIndex>=0) 
      arr2.splice(itemIndex,1); 
    } 
); 

Об комментарии

Если arr2 IST смешанный массив, значение которого:

var arr2 = [['2013-11-29','50','annL','annT'], ['20','annL','annT', '25','annL'], 
'annT', '44','annL','annT', '96','annL','annT', '26','annL','annT', '10','annL','annT']; 

Передача значения arr2 алгоритм будет:

[['2013-11-29','50','annL','annT'], ['20','annL','annT', '25','annL'], 
"96", "26", "annT", "10", "annL", "annT"] 

Если то, что вы хотите, чтобы удалить вхождения arr1 элементов в каждом arr2 2d значение массива:

var arr2 = [['2013-11-29','50','annL','annT'], ['20','annL','annT', '25','annL'], 
['annT', '44','annL','annT', '96','annL','annT'], ['26','annL','annT', '10','annL','annT']]; 

arr2.forEach(
    function(arrayItem){ 
     arr1.forEach(function(item){ 
      if(arrayItem.indexOf(item)>=0) 
       arrayItem.splice(arrayItem.indexOf(item),1); 
     }); 
    }); 

//arr2 will produce: [['2013-11-29','50'], [], ['96'], ['26','10']] 

Осторожно он будет производить ошибка, если arr2 не является истинно 2d-массивом.

+0

Спасибо, я проверю – user2879220

+0

ЕСЛИ это arr2 - это 2D-массив, чем я могу использовать ваш код ?? – user2879220

+0

Да, вы можете использовать его, но я не знаю, будут ли результаты подходящими. Я обновил свой ответ с этим вопросом. – kabomi

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