尝试检查linq.js FirstOrDefault()的结果,但检查null或undefined不起作用。在调试它时遇到一些麻烦,但我可以看到它正在返回某种对象。
我找不到任何关于此在线方法的文档。
我试过了:
var value = Enumerable.From(stuff).FirstOrDefault('x => x.Name == "Doesnt exist"')
if (value) {
alert("Should be not found, but still fires");
}
if (value != null)
alert("Should be not found, but still fires");
}
答案 0 :(得分:9)
FirstOrDefault()
功能的签名是:
// Overload:function(defaultValue)
// Overload:function(defaultValue,predicate)
如果集合为空,则第一个参数始终是要返回的默认值。第二个参数是要搜索的谓词。您对该方法的使用是错误的,您的查询应该写为:
var value = Enumerable.From(stuff)
.FirstOrDefault(null, "$.Name === 'Doesnt exist'");
答案 1 :(得分:4)
当我输入时,我们找到了答案。由于文档很少,我会分享。
您需要在FirstOrDefault()之前将lambda移动到Where子句中。
:当强>
var someArray = ["Foo", "Bar"];
var result = Enumerable.From(someArray).Where('x => x == "Doesnt exist"').FirstOrDefault();
结果未定义(正确)
:当强>
var someArray = ["Foo", "Bar"];
var result = Enumerable.From(someArray).Where('x => x == "Bar"').FirstOrDefault();
结果是'Bar'(正确)
:当强>
var someArray = ["Foo", "Bar"];
var result = Enumerable.From(someArray).FirstOrDefault('x => x == "Bar"');
结果为'Foo'(不正确)