我正在尝试使用Underscore.js库的findWhere函数从node.js服务器上的数组中高效地找到对象,我不明白为什么它总是返回未定义的。

我使用节点控制台测试了该功能,并且该对象明确包含一个具有指定键的对象,但使用findWhere时仍未返回任何内容。

在这里,我确保在findWhere中寻找的“ fixture”键的值确实等于我希望返回的对象中的匹配值:


  '55785f4e38bd12511018145d'==预测[0]。夹具;
  
  真正


当检查findWhere搜索的数组中保存了哪些值时,我确认该值确实存在:


  预测
  
  [{夹具:'55785f4e38bd12511018145d'}]


检查我希望返回的值:


  预测[0]。夹具
  
  '55785f4e38bd12511018145d'


运行findWhere查询,该查询返回未定义:


  var foundPrediction = underscore.findWhere(predictions,{fixture:'55785f4e38bd12511018145d'});
  
  未定义


我能想到的唯一原因是,这可能与强制转换有关,或者可能与函数中返回false的'==='有关,但是我有什么办法可以找到findWhere,可以根据需要返回对象?我必须求助于使用for循环的手动搜索?

提前致谢!

最佳答案

您的代码没有错。看起来您正在控制台中运行,这就是为什么在按回车后控制台显示未定义的原因。您可能以为foundPrediction值是不确定的。您需要管理foundPrediction变量以获得所需的结果。

同样,强制转换没有问题,因为它返回true。

var predictions = [{
    fixture:'55785f4e38bd12511018145d'
}]
console.log('55785f4e38bd12511018145d' === predictions[0].fixture);
var foundPrediction = _.findWhere(predictions, {fixture: '55785f4e38bd12511018145d'});
console.log(foundPrediction);


我已经在jsFiddle中添加了代码。希望能帮助到你

09-25 18:09