使用Underscore JS _contains方法检查数组中的键/值对是否存在

时间:2014-10-01 16:26:01

标签: javascript underscore.js

如果我有以下物品:

var record = {
    title: "Hello",
    children: [
        {
            title: "hello",
            active: true
        },
        {
            title: "bye",
            active: false
        }
};

我想使用下划线来确定记录中的一个子节点是否具有等于来自表单帖子的变量的标题,但也需要不区分大小写...例如:

var child = {title:" heLLo",active:true}

并强调(这是错误的,我需要帮助):

if ( _.contains(record.children, child.title) ) {
    // it already exists...
} else {
    // ok we can add this to the object
}

因此,在处理具有多个键/值对的数组对象时,我基本上不了解如何使用下划线。还有什么是忽视案例的最佳方法?这应该在下划线_.contains函数中完成吗?正则表达式?事先使用toLowerCase()来创建变量?如果有人输入&#34; Hello&#34;,&#34; HELLO&#34;,&#34; heLLO&#34;等的任何变体,我都不希望插入发生。< / p>

谢谢!

1 个答案:

答案 0 :(得分:2)

使用_.findRegExp与&#34; i&#34; case-ignore标志

var valueFromPost = "bye";
var someOfChildrenHasValueFromPost = _.find(record.children,function(child){
    return child.title.match(new RegExp(valueFromPost,"i"));
});

<强>更新

以下是@JSFiddle

的示例

JS代码:

record = {
    children:[
        {title:'bye'},
        {title:'Bye'},
        {title:'Hello'}
        ]
}
var testValue = function(value) {
    return  _.find(record.children,function(child){
        return child.title.match(new RegExp(value,"i"));
    });
}
console.debug(testValue('Bye')); //returns object with "Bye" title
console.debug(testValue('What'));//returns undefined
console.debug(testValue('bye')); //returns object with "bye" title