如何使用下划线js从对象数组中查找字符串?

时间:2014-09-01 08:07:31

标签: javascript node.js underscore.js sails.js

您好我正在尝试使用下划线功能执行_.find。当我尝试执行它时,它返回undefined,但是我从该对象搜索的所有字符串始终存在。请在下面找到我的示例数据结构:

oArrays = [
  { 
    "c":"ABC", 
    "sc":[
      { "name":"ABC123", "t1":0, "t2":0 },
      { "name":"ABC456", "t1":0, "t2":0 },
      { "name":"ABC789", "t1":0, "t2":0 }
    ] 
  },
  { 
    "c":"BCDEF", 
    "sc":[
      { "name":"JJHS", "t1":0, "t2":0 },
      { "name":"JKHJYH", "t1":0, "t2":0 },
      { "name":"DKJHKJ", "t1":0, "t2":0 }
    ] 
  },
  { 
    "c":"ZYXV", 
    "sc":[
      { "name":"KDSKD", "t1":0, "t2":0 },
      { "name":"PWIFGF", "t1":0, "t2":0 },
      { "name":"WWSD", "t1":0, "t2":0 }
    ] 
  }, 
]

_.find(oArrays, function(item){
   return item.sc.name==="ABC123" ;
});

以上代码不起作用,结果未定义....是否可以只在一个_.find函数中执行它?

我尝试使用多个_.map函数,它的工作原理。但是尽可能我不想使用它因为它会有太多的循环。 (以下示例)

_.map(oArrays, function(item){
  _.find( item.sc, function( item2 ) {
    return item2.name==="ABC123" ;
  });
});

Ooops,顺便说一下我正在使用sails-controller执行这些代码。

非常感谢任何帮助:)

提前致谢!

1 个答案:

答案 0 :(得分:4)

item.sc.name绝不是字符串,因为您正在尝试将其与之比较。事实上,它实际上是undefined。但是item.sc是一个具有name属性的对象数组。

您必须检查name属性中是否有您正在寻找的内容:

_.find(oArrays, function(item) {
    return _.contains(_.pluck(item.sc, "name"), "ABC123");
});