比较两个Javascript数组并删除重复项

比较两个Javascript数组并删除重复项,javascript,Javascript,如果一个数组中有另一个数组的元素,那么有没有其他更好的方法来删除该数组中的重复项 <script> var array1 = new Array("a","b","c","d","e","f"); var array2 = new Array("c","e"); for (var i = 0; i<array2.length; i++) { var arrlen = array1.length; for (var j = 0; j<arrlen; j++

如果一个数组中有另一个数组的元素,那么有没有其他更好的方法来删除该数组中的重复项

<script>
var array1 = new Array("a","b","c","d","e","f");
var array2 = new Array("c","e");

for (var i = 0; i<array2.length; i++) {
    var arrlen = array1.length;
    for (var j = 0; j<arrlen; j++) {
        if (array2[i] == array1[j]) {
            array1 = array1.slice(0, j).concat(array1.slice(j+1, arrlen));
        }
    }
}
alert(array1);

</script>

var array1=新数组(“a”、“b”、“c”、“d”、“e”、“f”);
var array2=新数组(“c”、“e”);
对于(var i=0;i
或者,在ES6可用的情况下:

array1 = array1.filter(val => !array2.includes(val));

使用
Array.splice()

vararray1=['1','2','3','4','5'];
变量array2=['4','5'];
var指数;
对于(变量i=0;i-1){
阵列1.拼接(索引1);
}
}
window.onload=函数(){
var array1=['a','b','c','d','e','f','g','h','i','j','k','l','m'];
变量array2=['c','h','k'];
var array3=[];
var SecondarrayIndexcount=0;
对于(变量i=0;i
出于我无法理解的原因,诀窍是向下循环外循环(i--),向上循环内循环(j++)

请参见下面的示例:

function test() {
  var array1 = new Array("a","b","c","d","e","f");
  var array2 = new Array("c","e");
  for (var i = array1.length - 1; i >= 0; i--) {
    for (var j = 0; j < array2.length; j++) {
      if (array1[i] === array2[j]) {
        array1.splice(i, 1);
        }
      }
    }
    console.log(array1)
  }
功能测试(){
var array1=新数组(“a”、“b”、“c”、“d”、“e”、“f”);
var array2=新数组(“c”、“e”);
对于(变量i=array1.length-1;i>=0;i--){
对于(var j=0;j
我如何知道这一点?请参见以下内容:

for( var i =myArray.length - 1; i>=0; i--){
  for( var j=0; j<toRemove.length; j++){
    if(myArray[i] === toRemove[j]){
      myArray.splice(i, 1);
    }
  }
}
for(var i=myArray.length-1;i>=0;i--){
对于(var j=0;j=0;i--){

对于(var j=0;j,使用Set.prototype构造函数:

这是我的解决办法

array1=array1.filter(函数(val)){
返回array2.indexOf(val.toString())=-1;

})这是我在ES6中删除重复项的解决方案

let foundDuplicate = false;
existingOptions.some(existingItem => {
  result = result.filter(item => {
    if (existingItem.value !== item.value) {
      return item;
    } else {
      foundDuplicate = true;
    }
  });
  return foundDuplicate;
});

我使用这种方法是因为在我的例子中,我有一个对象数组,而indexOf有问题。

arr1=arr1.filter(val=>!arr2.includes(val));

作为上述代码的旁注和解释:“indexOf:返回数组中元素的第一个(最小)索引,该索引等于指定的值,如果找不到,则返回-1。”()我喜欢它,但它确实需要解释,或者至少需要一个链接来引导某人找到正确的位置来解释它。这段代码很棒,但要知道如果你有嵌套数组,它就不起作用了。对于唯一值的列表来说效果很好,但是对于其中包含重复项的列表,比如比较“赎金便笺”呢杂志中的单词列表(假设大小写必须匹配并且每个单词的编号正确)…很好的筛选器解决方案。我可能错了,但我认为这不会是perform ant。您正在执行2个循环,这是您不使用数组文字、筛选器或includes的原因吗?如何在不使用属性名的情况下删除重复项。就像不指定任何数组对象名一样。@vishal change array1[I]==array2[j]扩展项的属性名称。这使它现在成为
array1[i]。propertyofthiseitem===array2[j]。possiblyTheSameProperty
这很好。使用
Set
和MDN链接中的示例函数可以实现非常巧妙的联合(这回答了问题),差异,以及intersection@Drenai是,如果字符串化,它适用于对象:)
function test() {
  var array1 = new Array("a","b","c","d","e","f");
  var array2 = new Array("c","e");
  for (var i = array1.length - 1; i >= 0; i--) {
    for (var j = 0; j < array2.length; j++) {
      if (array1[i] === array2[j]) {
        array1.splice(i, 1);
        }
      }
    }
    console.log(array1)
  }
for( var i =myArray.length - 1; i>=0; i--){
  for( var j=0; j<toRemove.length; j++){
    if(myArray[i] === toRemove[j]){
      myArray.splice(i, 1);
    }
  }
}
var myArray = [
  {name: 'deepak', place: 'bangalore'}, 
  {name: 'chirag', place: 'bangalore'}, 
  {name: 'alok', place: 'berhampur'}, 
  {name: 'chandan', place: 'mumbai'}
];
var toRemove = [
  {name: 'deepak', place: 'bangalore'},
  {name: 'alok', place: 'berhampur'}
];

for( var i=myArray.length - 1; i>=0; i--){
    for( var j=0; j<toRemove.length; j++){
        if(myArray[i] && (myArray[i].name === toRemove[j].name)){
            myArray.splice(i, 1);
        }
    }
}

alert(JSON.stringify(myArray));
let array1 = Array('a', 'b', 'c', 'd', 'e', 'f')
let array2 = Array('c', 'e', 'g')
let concat = array1.concat(array2) // join arrays => [ 'a', 'b', 'c', 'd', 'e', 'f', 'c', 'e', 'g' ]

// Set will filter out duplicates automatically
let set = new Set(concat) // => Set { 'a', 'b', 'c', 'd', 'e', 'f', 'g' }

// Use spread operator to extend Set to an Array
let result = [...set]
console.log(result) // =>  [ 'a', 'b', 'c', 'd', 'e', 'f', 'g' ]
let foundDuplicate = false;
existingOptions.some(existingItem => {
  result = result.filter(item => {
    if (existingItem.value !== item.value) {
      return item;
    } else {
      foundDuplicate = true;
    }
  });
  return foundDuplicate;
});