其中Linq.js函数对Json数据不起作用

时间:2013-01-08 18:05:05

标签: javascript underscore.js linq.js

如何更正所需输出的以下代码

var Data = [{ "A": -27, "B": -39 }, { "A": 28, "B": 0}]

var filter = "x[A]==28";

var findItem = Enumerable.From(Data)
 .Where(function (x) { return filter ; })
 .ToArray();

alert(findItem.length);

$.each(findItem, function (i, value) {
alert(value["A"]);
});

它应该给我一个值A:28或完成一个记录{“A”:28,“B”:0},为什么我得到两个值,如何得到正确的结果?

使用以下路径中的“linq.js”: [https://raw.github.com/gist/1175460/fb7404d46cab20e31601740ab8b35d99a584f941/linq.js]

JSfiddle的代码:http://jsfiddle.net/Irfanmunir/gLXNw/2/

2 个答案:

答案 0 :(得分:3)

您的过滤器是一个始终求值为true的字符串。把你的过滤器放在一个函数中:

var filter = function(x) { return x['A'] === 28 };

并使用此:

.Where(filter)

请参阅更新的小提琴:http://jsfiddle.net/gLXNw/4/

答案 1 :(得分:2)

您必须传递谓词函数或表示此类函数的字符串。你正在传递一个函数,所以linq.js不期望另一个函数/字符串。

对于Linq.js,您必须将此语法用于字符串:

var filter = "x => x['A']==28";  // also note the quotes surrounding A

然后将此函数字符串传递给.Where

.Where(filter)

你当然也可以内联这个:

.Where("x => x['A']==28")

http://jsfiddle.net/gLXNw/3/