Как удалить дубликаты объектов из массива сценариев Java? - PullRequest
0 голосов
/ 19 января 2012

У меня есть два массива, как показано ниже.Я хочу удалить элементы Array2 из Array1.Как мне это сделать? (Либо в обычном Java-скрипте, либо с помощью ExtJS)

var Array1 = [];

var Array2 = [];

Array1.push(['eth0'], ['eth1']);

Array2.push(['eth1']);

Ответы [ 3 ]

1 голос
/ 19 января 2012
function removeDupes(a1, a2) {
  var index = {}, result = [], i, l;
  for (i=0, l=a2.length; i<l; i++) {
    index['-' + a2[i]] = "";
  }
  for (i=0, l=a1.length; i<l; i++) {
    if (index['-' + a1[i]] !== "") result.push(a1[i]);
  }
  return result;
}
  • Объект index предназначен для быстрого поиска значений, поэтому мы можем быстро проверить их существование.
  • '-' + предназначен для переноса факта, что значения могут бытькак toString, которые также существуют как свойства объекта.Если в префиксе есть буква, с которой обычные идентификаторы JavaScript не могут начинаться, каждое значение будет безопасным для использования в качестве ключа объекта.

Пример:

removeDupes([1,2,3,4], [2,4,5]);
// -> [1,3]

removeDupes([2,4,5], [1,2,3,4]);
// -> [5]
1 голос
/ 19 января 2012

Если вам доступна функция фильтра массива, вы можете сделать что-то вроде следующего:

var filteredArr = Array1.filter(function(val){
    return Array2.indexOf(val) != -1;
})

Я думаю, что это будет поддерживаться только в новых браузерах.Это элегантный способ справиться с ситуацией, поэтому вы можете взглянуть на библиотеку, подобную UnderscoreJS , которая будет включать в себя фильтрацию, по умолчанию использовать собственную реализацию, если она доступна., код будет выглядеть очень похоже:

var filterdArr = _.filter(Array1, function(val) {return Array2.indexOf(val) != -1});
0 голосов
/ 19 января 2012

Проверьте эту ссылку: http://www.developersnippets.com/2008/10/30/remove-duplicates-from-array-using-javascript/. Сконкатируйте ваши массивы с помощью concat () и вызовите uniqueArr ().

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