npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

linq-js

v2.2.0

Published

use linq and lamdba in javascript

Downloads

364

Readme

LinqJs

GitHub release npm npm Travis (.com) Codecov npm bundle size NPM GitHub search hit counter GitHub search hit counter GitHub search hit counter

Since 2.1.0, I rewrite all to use new features of ES6. The performance be better, memory used less and using deferred execution.

对 JavaScript 中原生数组、对象进行扩展, 提供了一些对数据的操作方法. 包括对数组结构、树形结构、对象结构等数据进行 查询,排序,连接,合并,分组,分段,转换,遍历 等一系列功能. 可以用精炼和易懂的代码实现比较复杂的操作.

一开始,在 ES5 的时代,我觉得 js 对数组的操作实在太繁琐了. 可能正是这种繁琐才有了像 underscore 这样优秀的 js 库的出现. 我本不是做前端出身的,我觉得其他语言对于数组或列表的操作要比 js 好用很多,提供了大量的方法和功能. 于是最早参考的 C#中的功能实现了一些方法, 就有了1.0版本. 后来,ES6 发布并普及开来,js 原生数组也增加了很多好用的功能,但是这还远远不够. 于是我又翻出了我的代码用 ES6 重写, 有了2.1版本, 并发布至npm上. 这一次我又借鉴了另外一些语言中的部分特性, 比如 php.我想我后面可能再会添加一些其他语言或框架类似的功能,比如 Java,Python 等. 后来我在 stackoverflow 中看到很多人对于树形结构的操作提了很多的问题,我想我的工具包应该要可以为他们提供帮助.于是在最新的几个版本中我加入了对树形结构的一些操作.

帮助文档(完善中) :+1:

Documentation(not completed) :+1:

Usage 用法

1. Import 引入

Use NodeJs 使用NodeJs

$ npm install --save linq-js
const Enumerable = require('linq-js');
  • description:This module require ES6. I suggest you to use this with ES6. The following examples is already use ES6.
  • 说明:本module依赖于ES6。建议项目在中使用ES6。以下案例中将均使用ES6写法。

2. Get IEnumerable instance 获取IEnumerable对象

interface IEnumerable { };

function asEnumerable():IEnumerable;
//You can use the asEnumerable methods of every object's to get an IEnumerable object;
//任何对象都有asEnumerable方法用来获取IEnumerable对象

e.g. 案例

'abc'.asEnumerable();
[1,2,3].asEnumerable();
({a:1,b:2}).asEnumerable();

3. Use IEnumerable instance 使用IEnumerable对象

e.g. 案例 简单的判断数组中的数据

let pets = [ { name: "Barley", age: 8, vaccinated: true }, { name: "Boots", age: 4, vaccinated: false }, { name: "Whiskers", age: 1, vaccinated: false } ];
let unvaccinated = pets.asEnumerable().any(p => p.age > 1 && p.vaccinated === false);
console.log(`There ${ unvaccinated ? "are" : "are not any" } unvaccinated animals over age one.`);
// This code produces the following output: 这段代码输出以下内容:
//  There are unvaccinated animals over age one.

e.g. 案例 两个数组进行内连接查询

let magnus = { id: 1, name: "Hedlund, Magnus" }, terry = { id: 2, name: "Adams, Terry" }, charlotte = { id: 3, name: "Weiss, Charlotte" };
let barley = { name: "Barley", owner: 2 }, boots = { name: "Boots", owner: 2 }, whiskers = { name: "Whiskers", owner: 3 }, daisy = { name: "Daisy", owner: 1 };
let people = [ magnus, terry, charlotte ];
let pets = [ barley, boots, whiskers, daisy ];
let query = people.asEnumerable().join(pets,
    (person, pet) => ({ ownerName: person.name, pet: pet.name }),
    person => person.id,
    pet => pet.owner);
for (let obj of query) {
    console.log(`${ obj.ownerName } - ${ obj.pet }`);
}
/*
 This code produces the following output: 这段代码输出以下内容:
 Hedlund, Magnus - Daisy
 Adams, Terry - Barley
 Adams, Terry - Boots
 Weiss, Charlotte - Whiskers
 */

:see mdn(Array) :参考 MDN(Array)

:see msdn(IEnumerable) :参考 MSDN(IEnumerable)

:see msdn(Enumerable) :参考 MSDN(Enumerable)