1

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

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
}
4

5 回答 5

1
var newArray = array1.filter(function(v, i) {
    return array1.indexOf(v) == i;
});

这将只返回来自 array1 的唯一项;

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);
} 
于 2013-08-28T21:21:37.613 回答
1

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

for (var i = 0; i < json.length; i++) { 
    var item = json[i];
    if (json.indexOf(item) >= 0) {
        // do something
    }
}
于 2013-08-28T21:11:03.973 回答
0

来自MDN:indexOf

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

来自MDN:过滤器

创建一个新数组,其中包含通过所提供函数实现的测试的所有元素。

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

因此,要更改为仅返回重复项,则返回true在两者中找到的任何内容:

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

Array1 现在只包含重复项。

于 2013-08-28T21:17:12.143 回答
0

valArray.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
    }
  }
);
于 2013-08-28T21:09:53.633 回答
0

您可以使用一些现代库......比如 underscorejs。

我猜你正在寻找交叉点: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
}
于 2013-08-28T21:15:10.030 回答