최고의 JavaScript 용 LINQ 라이브러리는 무엇입니까? [닫은]


95

LINQ와 유사한 구문을 사용하여 복잡한 JSON 개체를 쿼리 할 수있는 JavaScript 라이브러리를 찾고 있습니다. 빠른 검색을 통해 내가 필요한 것을 제공 할 수있는 몇 가지 유망한 옵션을 찾았습니다.

LINQ to JavaScriptjLinq

  • 누구든지 그것들을 사용한 경험이 있습니까?
  • 장단점은 무엇입니까?
  • 성능이 비슷합니까?
  • LINQ to JavaScript의 함수 전달 구문이 숨겨진 이점을 제공합니까 (개인적으로 jLinq 구문이 언뜻보기에 더 매력적이라고 ​​생각합니다)?
  • 두 프로젝트에서 부족한 점은 무엇입니까?
  • 저자에게 연락해 본 적이 있습니까? 그들은 얼마나 반응 했습니까?
  • 어떤 프로젝트가 더 널리 사용됩니까?

철저한 트라이 아웃을하는 것이 처음이라고 생각합니다.


방금 jinqJs.com 오픈 소스 프로젝트를 출시했는데 도움이 될 것입니다.
NYTom

LINQ 4 ES 2015, fermium-co.github.io/LINQ4ES2015 동일한 C # 구문을 사용하는 모든 LINQ 메서드를 사용 해보세요 . 동일한 .NET LINQ to 개체 사양을 구현했습니다.
Yaser Moradi

몇 년 전에 dinqyjs.com을 출시했는데 Linq와 유사한 구문과 많은 기능이 있습니다.
garryp

2
이 질문은 오래되어 올바르게 닫혀 있지만 걸쳐 일어날 독자, LINQ의 주요 기능 (필터링, 변환 및 집계)는이 내장 사용하여 수행 할 수 있습니다 filter, mapreduce배열 함수. 새로운 람다 구문은 코드를 LINQ 코드와 훨씬 더 비슷하게 만드는 데 도움이됩니다.
jpmc26

몇 달 전에 출시했습니다 Linq-Collections( npmjs.com/package/linq-collections ). 지연된 실행과 수많은 내부 최적화를 사용하여 엄청나게 빠릅니다. Microsoft의 표준을 기반으로합니다 (C # Linq를 알고 있다면 linq-collection을 알고있는 것입니다)
Ivan Sanz-Carasa

답변:


13

Rx for Javascript를 보셨나요 ? 그것이 당신이 원하는 것입니다.


2
나는 이것을 제안하려고했지만 실제로 linq to objects와 같지는 않습니다. (그렇다면 .NET의 객체에 Rx와 Linq가 모두 필요한 이유는 무엇입니까?) 데이터 흐름 측면에서 일반 Linq와 반대 방향으로 작동합니다.
Daniel Earwicker

25
나는 이것이 받아 들여지는 대답이 싫어. 예, .NET의 관찰 가능 항목이 열거 가능 항목과 유사하다는 것은 학문적으로 흥미 롭습니다. 이 질문을 찾는 사람은 실제로 RX / observables를 원하지 않습니다 (이미 녹아웃, angularjs 등에서 훨씬 더 유용한 구현이 있습니다). 답 자체는 관련성이 무엇인지 설명하려고하지도 않습니다. 정말 가장 적절한 선택입니다. "선도적"이라고는 할 수 없습니다. linq.js 다운로드의 약 1/5를 차지합니다.
Aaronaught 2013-07-13

2
@Aaronaught 그 대답은 3 년 전에 주어졌고 상황이 확실히 바뀌었고 linq.js는 지금 당시보다 훨씬 앞서 있습니다. 당시에는 다른 라이브러리가 훌륭하거나 불완전하지 않았고 RX에 풀 타임 개발자가 작업했기 때문에 rx.js가 JS로 LINQ 작업을 수행하는 가장 좋은 방법이라고 믿었습니다. 또한 비동기가 중요했고 여전히 JavaScript에서 IMO입니다. 이는 Observables로 얻을 수있는 것입니다. 마지막으로 Rx의 Observable은 Knockout 및 AngularJS Observable과 매우 다르며 다른 용도로 사용됩니다. 귀하의 의견이 기록되고 투표 할 수 있습니다! :)
Richard Anthony Hein

2
@Aaronaught 참고 사항 ... 누군가 JavaScript 용 LINQ 관련 라이브러리를 찾고 있다면 Rx에 대해 확실히 알아야합니다. 100 % LINQ이고 LINQ를 알고 있지만 Rx를 아는 것은 사실 절반에 불과합니다. 건배.
Richard Anthony Hein 2013

2
RX, Linq 및 JavaScript에 대한 폭 넓은 경험을 쌓았 기 때문에 JavaScript 용 Linq와 유사한 라이브러리를 찾는 사람 은 RX에 대해 확실히 알 필요 가 없으며 "이야기"를 구체적으로 정의하면 이야기의 절반에 불과하다고 말할 수 있습니다. 반 RX가됩니다. 그렇지 않다고 주장하는 것은 물을 진흙탕으로 만들고 단순한 요구 사항을 가진 사람들이 옵션을 이해하는 것을 더 어렵게 만듭니다. 자전거를 찾는 사람에게 먼저 오토바이에 대해 배워야한다고 말하는 것과 같습니다. 물론 그 관계는 흥미롭지 만 문맥 상 특별히 유용하지는 않습니다.
Aaronaught 2013

71

linq.js 를 확인하는 것이 좋습니다 . .NET 람다 구문을 따르며 Microsoft 환경에 잘 통합되어 있습니다.

JavaScript 용 LINQ- http : //linqjs.codeplex.com/

장점

  • 모든 .NET 4.0 메서드 구현
  • 완전한 게으른 평가
  • VisualStudio에 대한 완전한 IntelliSense 지원
  • jQuery 지원
  • Windows 스크립트 호스트 지원
  • JavaScript (RxJS) 및 IntelliSense 생성기에 대한 반응 확장에 대한 바인딩
  • NuGet 설치 지원
  • 최근 업데이트 됨 (2011 년 1 월 마지막 릴리스)
  • 구문은 C #의 람다 구문을 따릅니다.

단점

  • linq.js 라이브러리는 약간 큽니다.
  • 이미 jQuery 또는 기타 js 라이브러리를 사용하고 있다면 가장 일반적으로 사용되는 기능을 이미 사용할 수 있습니다. 특히 jQuery의 filter 및 'Any'메소드를 참조하십시오 .

2
linq와 유사한 여러 라이브러리에 대한 성능 비교를 찾았습니다. danieltao.com/lazy.js/comparisons.html
Alexey F

Typescript def 파일이 뜨겁습니다!
kevp 2015 년

1
@AlexeyF 그래도 linq.js가 없습니까?
Alex

33

가장 기본적이고 자주 사용되는 Linq 연산자는 널리 사용되는 JS 라이브러리에서 매우 일반적으로 정의됩니다. 그들은 단지 다른 이름을 가지고 있습니다 (사실 그들은 Linq보다 전통적인 이름을 가지고 있습니다). Select된다 map, Where된다 filter, First그리고 FirstOrDefault이 될 [0].

내가 아는 라이브러리 (연결 한 라이브러리 포함)는 .NET Linq 에서처럼 구현을 게으르게 만드는 것을 귀찮게하지 않으며 배열을 사용하여 즉시 평가합니다.

매우 훌륭하고 완전한 기능 목록 작업 세트를 보려면 http://osteele.com/sources/javascript/functional/을 시도하십시오.


LINQ에 익숙해지면 구문을 최대한 동일하게 유지하면 큰 도움이 될 것입니다. 지연 로딩은 문제가되지 않습니다. 필요한 모든 기능이있는 것 같지만 몇 가지를 실험해야합니다. JavaScript LINQ 라이브러리를 사용하고 경험을 공유 한 사람이 누군가를 우연히 발견하기를 바라며 지금은 질문을 열어두고 있습니다. 시간이 지나면 아무도하지 않으면 답을 드리겠습니다.
Tom Tresansky

25
@Tom-나는 이미 Y 언어에서 똑같은 일을하는 좋은 방법이 있다면 Y 언어 내에서 언어 X를 사용하는 경험을 시뮬레이션하려고 시도하는 라이브러리를 약간 조심하는 경향이 있습니다. "관용구"를 배우는 것이 더 낫다고 생각합니다. "언어 Y. 사람들은 Linq가 나오기 전에 JS에서 함수 시퀀스 연산자를 작성했고 JS에서는"전통적인 "Lispy 이름과 접근 방식을 유지했기 때문에 이제는 더 많은 JS 스타일이되었습니다. 그래서 저는 "When in Rome ..."이라고 말합니다. C #에서는 수직으로 정렬되는 중괄호를 배치하는 방법까지도 JS와 Java에서는 첫 번째를 같은 줄에 넣습니다.
Daniel Earwicker

2
매우 유용한 답변-특히 '선택'이 '지도'에 매핑된다는 점입니다. 이 경우 underscore.js도 사용할 수 있습니다
PandaWood

1
두 어레이를 결합하는 것은 어떻습니까? 배열 B에없는 배열 A의 요소를 가져 오는 방법을 알아 내려고했지만 JQuery에서이를 수행하는 방법이없는 것 같습니다. LINQ에서는 매우 사소합니다.
Noel Abrahams 2011

@Noel Abrahams-이런 종류의 경우 jQuery 대신 ES5 배열 메서드를 사용하지 않는 이유는 무엇입니까? 예a1.filter(function(e) { return a2.indexOf(e) == -1; })
Daniel Earwicker 2011

10

underscore.js 살펴보기를 권장 합니다 . 다른 일부와 같은 직접적인 LINQ 포트는 아니지만 매우 편안한 "LINQ와 유사한"경험입니다. 필요한 모든 필터, 정렬 및 프로젝트 옵션을 지원하며 우수한 문서 및 커뮤니티 지원을 제공합니다.

에 대한 보너스로 녹아웃 사용자가 UnderscoreKO 마네의 관찰 배열에 밑줄의 배열 방법을 추가합니다. 데모


3
나는 밑줄도 확실히 제안 할 것입니다. 불행히도 사용 가능한 모든 라이브러리에는 성능이 부족합니다. AC # 개발자이기 때문에 자바 스크립트 지향 라이브러리와 함께 C # 구문을 사용하고 싶지만 사용할 수있는 것은 없습니다. 앞서 언급 한 모든 라이브러리는 C # 방식으로 LINQ 함수를 구현하려고 시도하는 "javascript wrappers '입니다. 예를 들어 linq.js를 보면 getter가 선형 검색을 수행하는 Dictionary가 있습니다. Javascript의 객체는 뛰어난 성능 대신 그들이 구현 GetHashCodes 등
조지 Mavritsakis

4
LINQ의 특징은 지연 평가입니다. Underscore.js에는이 기능이 없습니다. 그러나 밑줄의 상위 집합 인 lodash 가 있습니다. 더 나은 성능을 발휘하며 연결 ​​메서드에 대한 지연 평가를 지원합니다. var arr = _.range (1000); _ (arr) .map (function (v) {return v + 1;}). filter (function (v) {return v % 2;}). take (100) .value ();
srgstm 2015 년

3
예 ... 이것은 얼마 전에 작성되었습니다. 나는 지금 또한 lodash를 추천 할 것입니다. Lodash를 허용하기 위해 UnderscoreKO를 포크하는 것을 고려하고 있습니다. 하지만 게으른 평가가 LINQ의 "특이한"기능이라는 데 동의하지 않습니다. LINQ에 대한 저의 감사는 일반적으로 다른 작업 방법보다 의도를 더 잘 전달한다는 것입니다. 그냥 생각. 어쨌든 둘 다 좋은 라이브러리.
Matthew Nichols

4

개인적으로 .NET의 열거 형에서 LINQ / set 작업 Union, Intersect, Except 및 Distinct를 찾습니다. 굉장히 유용하다. jQuery Array Utilities 라는 jquery 플러그인이 있습니다.배열에서 사용할 이러한 메소드를 제공하는 이 있습니다.

코드 예 :

$.distinct([1, 2, 2, 3])

[1,2,3] 반환

$.union([1, 2, 2, 3], [2, 3, 4, 5, 5])

[1,2,3,4,5] 반환

$.instersect([1, 2, 2, 3], [2, 3, 4, 5, 5])

[2,3] 반환

$.except([1, 2, 2, 3], [3, 4, 5, 5])

[1, 2] 반환


이 패키지 jquery-array-utilitiesbower를 사용하여 설치할 수도 있습니다 . 내가 원래 플러그인 : 제작하는 면책 조항 추가처럼 내가 좋아하는 것
크리스티안 Abrahamsen을

3

$ linq : http://jscriptlinq.codeplex.com/

var users = [{username: "asmith", domain: "north_america"},
    {username: "tmcfarland", domain: "europe"},
    {username: "cdeckard", domain: "nort_america"}];

var groups = [{user: "ASMITH", groupName: "base_users"},
    {user: "TMCFARLAND", groupName: "admins"},
    {user: "CDECKARD", groupName: "base_users"},
    {user: "CDECKARD", groupName: "testers"}];

var results = $linq(users).join(groups,
    function (x) { return x.username; },    // key for 'users'
    "x => x.user",                          // key for 'groups'
    function (outer, inner)                 // function to generate results
    { 
        return "user: " + outer.username + 
            ", domain: " + outer.domain +
            ", group: " + inner.groupName;
    },
    "(x, y) => x.toLowerCase() == y.toLowerCase()");    // compare keys case-insensitively

2

유사한 구문과 메서드 이름을 사용하여 LINQ를 JavaScript로 이식하려는 복제 라이브러리가 있습니다. 그러나 JS 커뮤니티에서 실제로 인기를 얻고 동일한 기능을 제공하는 라이브러리는 Underscore.js 입니다.


2

나는 이것들 대부분을 시도해 보았고 $ linq를 정말 좋아합니다 : http://jscriptlinq.codeplex.com/ 가장 좋습니다. 체인 기능을 포함하여 C # linq가 작동 할 것으로 예상하는 방식으로 작동합니다.


1

나도 이런 걸 찾고 있는데 ...

http://www.hugoware.net/Projects/jLinq

정말 멋져요! 아마도 jQuery와 같은 것을 통해 이벤트 핸들러를 설정하는 것과 비교하여 Rx ​​및 Observable의 요점을 이해하지 못할 수도 있습니다.


0

최근에 JavaScript 용 LINQ 라이브러리를 만들었습니다. .NET에서 제공하는 대부분의 LINQ 함수를 구현했으며 모든 LINQ 라이브러리 중에서 가장 빠릅니다.

http://fromjs.codeplex.com/

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.