如何从javascript数组中删除重复的对象?

时间:2012-01-19 19:28:18

标签: javascript extjs

我有两个数组,如下所示。我想从Array1中删除Array2元素。我该怎么做?(在普通的java脚本中或使用ExtJS)

var Array1 = [];

var Array2 = [];

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

Array2.push(['eth1']);

3 个答案:

答案 0 :(得分:1)

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 :(得分:1)

如果您可以使用阵列过滤功能,则可以执行以下操作:

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

我认为这只会在较新的浏览器中得到支持。这是处理这种情况的一种优雅方式,因此您可能需要查看像UnderscoreJS这样的库,其中包括过滤,默认为本机实现(如果可用)。

如果使用UnderscoreJS,代码看起来非常相似:

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

答案 2 :(得分:0)

点击此链接:http://www.developersnippets.com/2008/10/30/remove-duplicates-from-array-using-javascript/。用concat()控制你的数组并调用uniqueArr()。