1

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

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/

4

2 回答 2

3

您的过滤器是一个始终评估为真的字符串。将您的过滤器放在一个函数中:

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

并使用这个:

.Where(filter)

查看更新的小提琴:http: //jsfiddle.net/gLXNw/4/

于 2013-01-08T18:13:31.897 回答
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/

于 2013-01-08T18:12:35.230 回答