检查对象数组中是否存在名称

时间:2015-03-04 20:33:28

标签: javascript underscore.js

我有一个看起来像这样的对象数组

 var o = [
   {
    module : "mod1",
    customUrl : [
        { "state"    : "name1",
          "options"  : ["option1", "option2", "option3"]
        },
        { "state"    : "name2",
          "options"  : ["option1", "option2", "option3"]
        }
    ]
  },
 {
    module : "mod2",
    customUrl : [
        { "state"    : "name1",
          "options"  : ["option1", "option2", "option3"]
        },
        { "state"    : "name2",
          "options"  : ["option1", "option2", "option3"]
        }
    ]
 }
]

在函数中我传递了一个字符串。我希望能够针对“模块”键检查该字符串,看看它是否匹配任何一个,如

 checkName = function(name) {
      //check if "name" matches any "module" in o

 }

这是可能的(我使用下划线,但正常的javascript也很好)。谢谢!

3 个答案:

答案 0 :(得分:2)

你可以使用函数some,就像这样

var checkName = function(name) {
  return _.some(o, function (el) {
    return el.module === name;
  });
};
来自Array

some

var checkName = function(name) {
  return o.some(function (el) {
    return el.module === name;
  });
};

Example

答案 1 :(得分:1)

纯Javascript解决方案。如果未找到模块名称,则此函数返回false;如果找到名称,则此函数返回数组中的位置。此函数不重复计算,它只给出最后一次匹配的位置。

JSfiddle demo

var checkName = function(name) {
    var flag=false;
    for(var i=0; i<o.length;i++){
        if(name === o[i].module){
            flag=i;
        }
    }return flag;
};
console.log(checkName("mod2"));

答案 2 :(得分:1)

另一种方法是使用纯粹的原生JavaScript:将对象转换为字符串并检查确切的模块部分。

&#13;
&#13;
var checkName = function(haystack, needle) {
  return JSON.stringify(haystack).contains('"module":"' + needle + '"')
}

checkName(o, 'mod1'); // returns true
checkName(o, 'mod4'); // returns false
&#13;
&#13;
&#13;