我有两个数组,我希望能够比较两个数组,只返回匹配的值。例如,两个数组都具有值,cat因此将返回该值。我还没找到这样的东西。返回相似度的最佳方法是什么?
cat
var array1 = ["cat", "sum","fun", "run"]; var array2 = ["bat", "cat","dog","sun", "hut", "gut"]; //if value in array1 is equal to value in array2 then return match: cat
自然,我的方法是循环遍历第一个数组一次并检查第二个数组中每个值的索引。如果索引为> -1,则将push其添加到返回的数组中。
> -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,则可以先对两个数组进行排序,以重新索引其所有值:
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) {
并且其中FUNC原本说你随时随地更改this到arr2。
this
arr2