linq.js返回值(默认值)FirstOrDefault

时间:2014-07-18 17:32:56

标签: javascript linq.js

尝试检查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");
}

2 个答案:

答案 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'(不正确)