【发布时间】:2018-05-19 21:00:34
【问题描述】:
我正在学习 Javascript,我在 SO 上看到了一个函数,用于比较数组以检查它们是否相同。但是,如果两个数组是 [string1,string2] 和 [string2,string1],我当前的函数会返回 false。基本上,这两个位置是互换的。代码如下:
function _compareArrays(arr1,arr2){
var result = arr1 != null && arr2 != null && arr1.length == arr2.length && arr1.every(function(element) {
return arr2.indexOf(element);
});
return result ;
}
但是,我希望这两个数组返回相同。所以,我将.every 更改为.indexOf(),它似乎有效。但是,我有一个疑问,计数器究竟是如何在这里递增以确保对每个元素都进行比较的?
我的意思是,就像在 C++ 中,我们这样做,
for (int i = 0; i < 10; i++)
if (arr1[i] == arr2[i]
cout<<"Elements are same\n";
在这里,我有一个明确的i++,它增加了计数器。在上述函数中它是如何发生的?
谢谢!
【问题讨论】:
-
你的第一个代码块完全是垃圾。
indexOf在我读过的任何文档中都没有将函数作为参数 -So, I changed .every to .indexOf()当你的轮胎漏气时,你会用香蕉代替车轮吗? -
我只是 create shallow copies 的数组,对它们进行排序,然后使用您提到的比较机制
-
您定义的
_compareArrays方法总是返回-1。至于every方法如何在不显式递增计数器的情况下进行迭代:它是 Array 原型上的一个函数,可以自动进行迭代。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… -
看看我编辑的函数,上面的函数会不会也不起作用?
-
@sarah 再次查看我的答案。
标签: javascript arrays