65.9K
CodeProject 正在变化。 阅读更多。
Home

jLinq 2.2.0 发布!

starIconstarIconstarIconstarIconstarIcon

5.00/5 (7投票s)

2009年7月6日

CC (ASA 2.5)

4分钟阅读

viewsIcon

40841

jLinq 是一种 JavaScript 查询语言,可以轻松处理大量信息数组。今天,jLinq 2.2.0 发布,它提供了新命令、错误修复等!

听说过 jLinq 吗?如果没有,没关系。这是我个人将 LINQ 风格的查询语言用于 JavaScript 的项目。随着所有这些“Web 2.0”应用程序的兴起,在客户端排序、查询和管理记录的能力可能会变得必不可少。将 jLinq 与您已有的 JSON 数据一起使用,将是一套强大的组合。

如果您还没有尝试过,那么有一个 在线版本可供您使用并查看其实际效果。

以下是 jLinq 2.2.0 中的一些新功能。

更智能的比较

假设您运行了以下命令…

jLinq.from(users)
    .less("firstname", 5)
    .select();

看起来很简单,名字长度小于 5 个字符?

不…

jLinq 的先前版本会根据命令期望特定的数据类型。例如,如果您使用了 lesslessEqualsgreatergreaterEqualsbetweenbetweenEquals,那么预期的参数是数字,您正在查询的字段也是如此。

在新版本中,您将找到类似下面的代码,用于检查值。

//get the parameter value
value = query.helper.when(value, {
    number:function() { return value; },
    other:function() { return value.length; }
});

//determine how to check this against the value
return query.when({
    string:function() {
        return (query.value.length < value);
    },
    array:function() {
        return (query.value.length < value);
    },
    other:function() {
        return (query.value < value);
    }
});

jLinq 不再进行任何假设,而是会检查类型并返回使查询正常工作所需的值。例如,如果您将“less”与 string 值一起使用,它将自动使用长度属性而不是 string 值本身。

jLinq 在不同命令类型方面也更加智能。例如,以前 .contains() 只对 string 值有效。现在它适用于数组,或者将值转换为 string 然后检查结果。

11 个新命令

  • attach(alias, function):执行您的函数并使用您提供的别名将函数的返回值附加到记录上。
  • sum(field):返回一个对象,其中包含有关使用的字段名的总和信息。
    返回 {<br /> count:计算的记录数,<br /> result:所选所有记录的总和,<br /> records:用于计算总和的记录<br /> }
  • average(field):返回一个对象,其中包含有关使用的字段名的平均值信息。
    返回 {<br /> total:计算平均值之前的总和,<br /> count:使用的记录数,<br /> result:所选所有记录的平均值,<br /> records:用于计算平均值的记录<br /> }
  • max(field):找到提供的字段名的最大值。
  • min(field):找到提供的字段名的最小值。
  • except(collection):比较第二个记录集,仅返回在比较列表中找不到的记录。返回一个新的 jLinq 对象。(示例
  • intersect(collection):比较第二个记录集,仅返回在两个列表中都找到的记录。返回一个新的 jLinq 对象。(示例
  • union(collection):比较第二个记录集,仅返回两个列表中唯一的记录。返回一个新的 jLinq 对象。(示例
  • skipWhile(delegate):跳过选择记录,直到您的函数返回第一个“false”结果。在那之后,将选择所有记录。返回一个结果数组。(示例
  • takeWhile(delegate):选择记录,直到您的函数返回第一个“false”结果。在那之后,将忽略所有记录。返回一个结果数组。(示例
  • selectMany(collection, compareFunction, selectionFunction):将当前查询的每个值与提供的集合数组进行比较(示例)。对于每次成功比较,都会向您的结果中添加一条新记录。如果您使用自己的选择方法,则需要编写一个类似 function(queryRecord, compareRecord) { 的函数。返回值将被添加到列表中。如果未使用选择方法,则将返回以下对象。
    返回 {<br /> source:与 jLinq 查询中的记录进行比较,<br /> compare:与集合数组中的记录进行比较<br /> }

Bug 修复

在尝试排序记录时,Opera 存在一个 bug。我不确定为什么,但基本上,Opera 中的 for 循环确实存在差异。

jLinq 测试

如果您有兴趣创建自己的 jLinq 扩展方法,现在可以下载一系列测试,以确定您的命令不会破坏 jLinq 中的其他任何内容。

总结

呼!您还在看吗?您一定很敬业!

现在,我意识到如何使用 jLinq 可能仍然存在一些困惑。我目前正在制作一些屏幕录像,以便分享以帮助人们入门。

如果您对即将发布的屏幕录像有什么建议,请将您的想法发送给我,我会将其添加到我的列表中。

© . All rights reserved.