Underscorejs包含的行为与indexOf不同

时间:2016-02-16 00:42:54

标签: javascript underscore.js contains

我希望有人可以向我解释这一点,在不受欢迎的docs中,它说:

  

如果列表中存在该值,则返回true。如果list是一个数组,则在内部使用indexOf。

我想通过检查路径是否包含member来查看用户是否在成员页面上。目前路径可以是'/ members /'或'/ member / someid`。

所以我现在所拥有的是

_.contains(['/member'],path);

在两种情况下都返回false,但是如果我检查indexOf

path.indexOf('/member');

在两种情况下都返回0。

为什么_.contains的行为与indexOf不同,我该如何解决?

更新: 我打算测试的页面多于member,这就是为什么我在contains()中使用数组

1 个答案:

答案 0 :(得分:0)

contains在列表中搜索元素。如果列表为['a','b','c']并且您搜索了一个元素'a',那么您将成功,如果您有一个列表['abc','bcd','def']并且您搜索了一个元素{{1你会失败,因为那不在列表中。我们可以简单地编写代码来证明这一点:

'a'

在您的示例中,var list = [....]; var find = ...; list.forEach(function(element) { console.log("Is "+find+" the same as ["+element+"]? ", element==find); }); 'member'相同吗?它显然不是,它们是不同的字符串,因此'/member'会报告正确的事情:您的字符串不包含在您正在检查的列表中。