【问题标题】:Compare 2 arrays and remove duplicates比较 2 个数组并删除重复项
【发布时间】:2017-12-31 05:54:31
【问题描述】:

我正在尝试使用 jquery 比较 2 个数组并从中删除重复项。
这是我的代码。这个逻辑正确吗?

var list1 = [6, 7, 3, 4, 1, 2];
var list2 = [2, 4, 6, 5, 1, 9, 8, 7, 8];

var newArray = [];
var index1, index2;
$.each(list1, function(i, value)) {
  index1 = $.inArray(list1[i]);
  index2 = $.inArray(newArray[i]);
  if (index2 == -1) {
    newArray.push(list2[i]);
  }
}

预期输出:

[3,5,9,8]

【问题讨论】:

  • 你永远不会对index1做任何事情。
  • @Szabolcs 是正确的。
  • i 属于 list1,但您将它与 list2 一起使用,因此如果 list1 包含的元素多于 list2,您的代码将失败。
  • @t.niese 所以我不应该使用 [i] 对吗?
  • @krish 有必要使用 jquery 吗?

标签: jquery


【解决方案1】:

这样试试

<script type="text/javascript">
    var arr1=[6,7,3,4,1,2];
    var arr2=[2,4,6,5,1,9,8,7,8];
    $(document).ready(function(){
        var newArray=$.merge($(arr1).not(arr2).get(),$(arr2).not(arr1).get());
        console.log(newArray);
    });
</script>

输出为

[ 3, 5, 9, 8,8 ]

另一个答案仅使用 $.each、$.inArray 和 .push 试试这个

var list1 = [6, 7, 3, 4, 1, 2];
var list2 = [2, 4, 6, 5, 1, 9, 8, 7, 8];

var newArray = [];
$.each(list1, function(i, value){
    if($.inArray(value,list2)==-1){
        newArray.push(value);
    }
});
$.each(list2, function(i, value){
    if($.inArray(value,list1)==-1){
        newArray.push(value);
    }
});
newArray=$.unique(newArray);
console.log(newArray);

输出为

[ 3, 5, 9, 8]

【讨论】:

  • 请使用$.each,$.inArray.push给我这个问题的建议。
  • @krish 尝试第二个答案。
  • 这里我们在 $.each 中传递了list1,但为什么我们要使用list2 进行检查?
  • 我们正在检查list1 的值是否存在于list2 数组中。
  • 我们可以像 if($.inArray(value,list2)==-1 &amp;&amp; $.inArray(list2,newArray==-1)) 这样检查而不是 $.unique 吗??
【解决方案2】:

连接数组并过滤两者:

var list1=[6,7,3,4,1,2];
var list2=[2,4,6,5,1,9,8,7,8];

function removeDuplicates(arr1, arr2) {
    return [...new Set(arr1.concat(arr2).filter(e => ! (arr2.includes(e) && arr1.includes(e))))];
}

console.log(removeDuplicates(list1, list2));

【讨论】:

  • 请使用$.each,$.inArray.push.please 给我这个问题的建议。
【解决方案3】:

这和你的方法类似...

var list1=[6,7,3,4,1,2];
var list2=[2,4,6,5,1,9,8,7,8]; 
var list = list1.concat(list2);
var uniqueList = []; 
$.each(list , function(i, el){
  if($.inArray(el, uniqueList) === -1) 
   {
    uniqueList .push(el);
   }
});

【讨论】:

  • 它不会产生[3,5,9,8] 结果。
  • 那它会产生什么?这里的列表是什么?
【解决方案4】:

试试这个fiddle

var list1 = [6, 7, 3, 4, 1, 2];
var list2 = [2, 4, 6, 5, 1, 9, 8, 7, 8];
var newArray = [];
$.each(list1, function(i, value) {
  if ($.inArray(value, list2) == -1) {
    newArray.push(value);
  }
});
$.each(list2, function(i, value) {
  if ($.inArray(value, list1) == -1) {
    newArray.push(value);
  }
});
console.log(newArray);

按要求使用 $.each、$.inArray 和 .push

【讨论】:

    猜你喜欢
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    • 2014-12-16
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多