Javascript-当两个数组中的一个元素相同时,执行某些操作
Javascript - Do something when an element in two arrays are the same?
我找到了一个解决方案,可以返回一个没有重复的元素数组:
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现在只包含具有重复项的项。
相关文章:
- 单击元素两次后执行操作
- 如何在mvc3中执行操作而不更改当前页面
- jQuery onunload在按下按钮时执行操作
- 如果DOM发生更改,您将如何执行操作
- 在执行所有回调函数后执行操作
- JavaScript 对输入框执行操作
- 如何根据各种复选框状态执行操作
- 对页面重新加载 Jquery 执行操作
- jQuery如果大于则执行操作,但只执行一次
- ngStorage是否异步执行操作
- 如何逐一执行操作
- 只有当输入文本是example.com这样的域时才执行操作
- Javascript数学不起作用,更好的方式来执行操作
- Qubit在控制台中执行操作
- 停止setInterval,直到未执行操作
- 我如何使用javascript对音频标记执行操作
- JS 函数将对象作为输入,并返回一个对象,该对象对作为参数传递的对象执行操作
- 单击时执行操作多个具有相同类的 href
- 在 JavaScript 中传递指定秒数后如何执行操作
- 如何在对用户控件执行操作后调用 Web 服务