检查一个数组是否存在于一个数组的数组中?

42

我正在使用JavaScript,并希望检查一个数组是否存在于一个数组中的数组中。

以下是我的代码,以及返回值:

var myArr = [1,3];
var prizes = [[1,3],[1,4]];
prizes.indexOf(myArr);
-1

为什么?

在jQuery中也是一样的:

$.inArray(myArr, prizes);
-1

当元素存在于数组中时,为什么这会返回-1?


请看这个例子:http://jsfiddle.net/DUTTw/ - insertusernamehere
你不能使用等号操作符来比较两个唯一的对象,你需要进行深度平等检查。一些库提供了这样的功能,或者在这里我组合了一个,你可能会觉得有用。 - Xotic750
11个回答

-1
使用 JavaScript 的 Maps 数据结构,将数组的哈希值作为键名,将实际数组作为键值存储在 Map 中。如果需要遍历所有数组,可以使用 map.values() 方法。如果需要检查数组是否存在,只需计算哈希值 (O(n)复杂度),然后进行 O(1) 的查找操作。
哈希函数可以非常简单,比如将数组元素进行连接,形成一个字符串,用 '-' 连接起来即可。如果数组非常庞大,可以将其转换为数字(例如 [1,2] => 12),再将其对一个大质数取模,以避免哈希冲突。如果出现了冲突,则可以通过链式法解决。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接