自然,我的方法是遍历第一个数组一次并检查第二个数组中每个值的索引。如果索引是> -1
,则将push
其放到返回的数组中。
Array.prototype.diff = function(arr2) {
var ret = [];
for(var i in this) {
if(arr2.indexOf(this[i]) > -1){
ret.push(this[i]);
}
}
return ret;
};
我的解决方案不像其他人那样使用两个循环,因此它可能运行得更快一些。如果您想避免使用for..in
,您可以先对两个数组进行排序以重新索引它们的所有值:
Array.prototype.diff = function(arr2) {
var ret = [];
this.sort();
arr2.sort();
for(var i = 0; i < this.length; i += 1) {
if(arr2.indexOf(this[i]) > -1){
ret.push(this[i]);
}
}
return ret;
};
用法如下所示:
var array1 = ["cat", "sum","fun", "run", "hut"];
var array2 = ["bat", "cat","dog","sun", "hut", "gut"];
console.log(array1.diff(array2));
如果您在扩展 Array 原型时遇到问题/问题,您可以轻松地将其更改为函数。
var diff = function(arr, arr2) {
this
而且你会改变 func 最初所说的任何地方arr2
。