https://github.com/wm123450405/linqjs
https://gitee.com/wm123450405/linqjs (国内)
- 对 JavaScript 中原生数组、对象进行扩展, 提供了一些对数据的操作方法.
- 包括对数组结构、树形结构、对象结构等数据进行 查询,排序,连接,合并,分组,分段,转换,遍历 等一系列功能.
- 可以用精炼和易懂的代码实现比较复杂的操作
let array = [ 'zhao', 'qian', 'sun', 'li', 'zhou', 'wu', 'zheng', 'wang' ]
//将上述数组按照字母长度进行排序, 字母长度一致的按照字母顺序倒序排序
console.log(array.asEnumerable().orderBy(str => str.length).thenByDescending().toArray());
//结果为
//wu,li,sun,zhou,zhao,wang,qian,zheng
//一些人
let magnus = { name: "Hedlund, Magnus" },
terry = { name: "Adams, Terry" },
charlotte = { name: "Weiss, Charlotte" };
//一些宠物
let barley = { name: "Barley", owner: "Adams, Terry" },
boots = { name: "Boots", owner: "Adams, Terry" },
whiskers = { name: "Whiskers", owner: "Weiss, Charlotte" },
daisy = { name: "Daisy", owner: "Hedlund, Magnus" };
//一个包含所有 人 的数组
let people = [ magnus, terry, charlotte ];
//一个包含所有 宠物 的数组
let pets = [ barley, boots, whiskers, daisy ];
//这是一个一对多关系的两个数组
//需要显示出来所有的 人-宠物 的关系信息
//传统做法是
for (let p of people) {
for (let pet of pets) {
if (pet.owner === p.name) {
console.log(`${ p.name } - ${ pet.name }`);
}
}
}
//使用我的工具是
//思想类似数据库查询(如下语句), 连接两个数组(表), 条件为 person 的 name 与 pet 的 owner 相等
//select person.name, pet.name from `people` as person join `pets` as pet on person.name = pet.owner
people.asEnumerable()
.join(pets, (person, pet) =>`${ person.name} - ${ pet.name}`,
person => person.name,
pet => pet.owner)
.forEach(res => console.log(res));
//这是一个树形结构
let tree = {
value: 'a',
children: [
{
value: 'b', //此节点为 节点 c 与 节点 f 的最小公共祖先
children: [
{ value: 'c' },
{
value: 'd',
children: [
{ value: 'e' },
{ value: 'f' },
{ value: 'g' },
]
}
]
},
{ value: 'h', }
]
};
//获取一个树形的中多个节点的最小公共祖先
let root = tree.asEnumerable(node => node.children, node => node.value);
console.log(root.lowestAncestor('c', 'f')); //结果是 b
更多用法及案例 希望大家进入文档查看 http://wm123450405.oschina.io/linqjs/#/zh-cn
望大家多多关注 并给于意见和指导 谢谢
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.