Javascript-当两个数组中的一个元素相同时,执行某些操作

Javascript - Do something when an element in two arrays are the same?

本文关键字:执行 操作 元素 两个 数组 Javascript- 一个      更新时间:2023-09-26

我找到了一个解决方案,可以返回一个没有重复的元素数组:

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

不过,我只想稍微修改一下这段代码。我不想返回一个没有重复的数组,而是想在有重复的时候做点什么。问题是,我不确定这个代码到底是如何工作的。问题是我不确定val是如何设置的,或者它是什么

for (var i = 0; i < json.length; i++) { 
    var item = json[i];
    // if json.indexOf(val?), do something
}

然后阅读Array filter方法的文档。回调的val参数将传递给单个数组项,即json[i]item(在您的情况下):

for (var i = 0; i < json.length; i++) { 
    var item = json[i];
    if (json.indexOf(item) >= 0) {
        // do something
    }
}
var newArray = array1.filter(function(v, i) {
    return array1.indexOf(v) == i;
});

这将只返回array1中唯一的itesm;

array1.filter(function(v, i) {
    // write your code here ('v' is individual value and 'i' is its index)
    // don't return any anything if you don't want unique array to be returned.
    // 'array1.indexOf(v) == i' checks if current value is duplicate from previous any values.
    // try putting console.log on values you don't understand like (console.log(v,i) for values of 'v' and 'i')
    return array1.indexOf(v) == i;
});

在诅咒之外,你可以用for循环作为循环一个数组

for(i in array1){
    // where i is index of array1, to get current value use array1[i]
    if(array2.indexOf(array1[i]) >= 0){
        // do something
    }
    console.log(i);
} 

val由Array.prototype.filter设置,它对数组中的每个元素调用回调函数。由于你不想过滤,你可以使用Array.prototype.forEach,它还为数组中的每个元素调用一次回调函数:

Array1.forEach(
  // This function is called once per element in Array1
  function(val){
    if(Array2.indexOf(val) != -1){ // Check if that element is also in Array2
        // `val` is in both arrays,
        // Do something with it
    }
  }
);

您可以利用一些现代库。。。比如内裤。

十字路口是你要找的,我想:http://underscorejs.org/#intersection

_.intersection([1, 2, 3], [101, 2, 1, 10], [2, 1]);
=> [1, 2]

所以你的代码可能类似

if(_.insersection(arr1, arr2)){
  //since [] array is Falsy in JS this will work as a charm
}

来自MDN:索引

返回在数组中可以找到给定元素的第一个索引,如果不存在,则返回-1。

来自MDN:过滤

使用通过所提供函数实现的测试的所有元素创建一个新数组。

当在array2(==-1)中找不到来自array1的项时,第一个函数返回true。即:遍历A并添加B中未找到的任何内容。

因此,要更改为只返回重复项,请为两者中找到的任何内容返回true

Array1 = Array1.filter(function(val) {
    return Array2.indexOf(val) >= 0;
});

Array1现在只包含具有重复项的项。