下划线包含对象类型的(_.contains)

时间:2013-04-08 00:48:23

标签: javascript underscore.js

我刚开始使用Javascript并使用Underscore库。我看到他们有各种各样的实用功能,比如_.contains。有没有办法让这个工作在对象上?

var indexes = [ {'id': 1, 'name': 'jake' }, {'id':4, 'name': 'jenny'},  {'id': 9, 'name': 'nick'}, {'id': 1, 'name': 'jake' }, {'id':4, 'name': 'jenny'} ];

if (_.contains(indexes, {'id':1, 'name': 'jake'})) {
    console.log("contains");
}

他们展示的大多数示例都有简单的数组,其中包含字符串或数字。我想知道我可以做些什么来使用像_.contains这样的实用函数来实现对象。感谢。

2 个答案:

答案 0 :(得分:68)

contains要求值与===相当,不适用于不同的对象实例。

例如,如果您传递了正在搜索的确切对象,它将起作用,这不是很有用。

if (_.contains(indexes, indexes[0])) {

但您可以使用wherefindWhere

if (_.findWhere(indexes, {'id':1, 'name': 'jake'})) {

findWhere是下划线1.4.4中的新内容,因此如果您没有,请使用where

if (_.where(indexes, {'id':1, 'name': 'jake'}).length > 0) {

答案 1 :(得分:13)

您实际上想要使用_.where

var indexes = [ {'id': 1, 'name': 'jake' }, {'id':4, 'name': 'jenny'},  {'id': 9, 'name': 'nick'}, {'id': 1, 'name': 'jake' }, {'id':4, 'name': 'jenny'} ];

if (_.where(indexes, {'id':1, 'name': 'jake'}).length) {
    console.log("contains");
}