给定两个长度不等的数组:
var arr1 = ["mike", "sue", "tom", "kathy", "henry"]; //arr1.length = 5
var arr2 = ["howey", "jim", "sue", "jennifer", "kathy", "hank", "alex"]; //arr2.length = 7
如何找到两个数组共有的值?在这种情况下"sue"
,"kathy"
应该退回。
给定两个长度不等的数组:
var arr1 = ["mike", "sue", "tom", "kathy", "henry"]; //arr1.length = 5
var arr2 = ["howey", "jim", "sue", "jennifer", "kathy", "hank", "alex"]; //arr2.length = 7
如何找到两个数组共有的值?在这种情况下"sue"
,"kathy"
应该退回。
这是一个基于交集的函数Array.prototype.filter
function intersect(a, b) {
var t;
if (b.length > a.length) t = b, b = a, a = t; // indexOf to loop over shorter
return a.filter(function (e) {
return b.indexOf(e) > -1;
});
}
var arr1 = ["mike", "sue", "tom", "kathy", "henry"];
arr2 = ["howey", "jim", "sue", "jennifer", "kathy", "hank", "alex"];
intersect(arr1, arr2); // ["sue", "kathy"]
您可能还需要考虑以下内容
var arr1 = ['sue', 'sue', 'kathy'],
arr2 = ['kathy', 'kathy', 'sue'];
上面现在会给["sue", "sue", "kathy"]
. 如果您不想重复,您可以对此进行进一步的过滤。这也将使结果标准化。IE
return a
.filter(/* .. */) // same as before
.filter(function (e, i, c) { // extra step to remove duplicates
return c.indexOf(e) === i;
});
添加它现在将返回与之前的数组 ( ) 相同的结果["sue", "kathy"]
,即使有重复。
您可以使用Array.filter:
var result = arr1.filter(function(n) {
return arr2.indexOf(n) > -1;
});
你想找到两个数组的交集吗?
您可以使用下划线的intersection()
. 这将为您提供两个数组中存在的值列表。
var commonValues = _.intersection(arr1, arr2);
如果您不想使用库,那么实现将是微不足道的......
var commonValues = arr1.filter(function(value) {
return arr2.indexOf(value) > -1;
});
如果您的目标平台不支持Array.prototype.filter()
并且Array.prototype.indexOf()
不支持...
var commonValues = [];
var i, j;
var arr1Length = arr1.length;
var arr2Length = arr2.length;
for (i = 0; i < arr1Length; i++) {
for (j = 0; j < arr2Length; j++) {
if (arr1[i] === arr2[j]) {
commonValues.push(arr1[i]);
}
}
}
迭代其中一个数组并将对象与另一个进行比较:
var results = [];
for (var i = 0; i < arr1.length; i++) {
if (arr2.indexOf(arr1[i]) !== -1) {
results.push(arr1[i]);
}
}