How to Implement LINQ methods in JavaScript – Part 6

April 15, 2018
💫 Originally posted here. Broken? Let me know ~

Photo by Baher Khairy on Unsplash
I will cover methods for getting subset of sequence.

Here are the methods covered so far.

  1. Part 1 〰️ Select, Aggregate, Where, OrderBy (Ascending, Descending)
  2. Part 2 〰️ Any, Distinct, Concat, SelectMany
  3. Part 3 〰️ Reverse, Zip, Min/Max
  4. Part 4 〰️ Union, Intersect, Except
  5. Part 5 〰️ Sum, Average, Count
  6. Part 6 〰️ First, Last, DefaultIfEmpty, Skip, Take
  7. Part 7 〰️ Empty, Repeat, Range
  8. Part 8 〰️ All, Contains, SequenceEqual

🔴 Overview

In this article, I will cover following methods.

LINQ MethodsGo to example

The sample collections used in this part are shown as below.


🔴 Examples

🔸 First/FirstOrDefault

I’ve just used “first” in JavaScript to implement “First/FirstOrDefault”.
JavaScript is dynamically typed so it wouldn’t know what default value is unless you specify unlike in C#.

🔸 Last/LastOrDefault

Same as “first”, I used “last” in JavaScript to implement both “Last/LastOrDefault”

🔸 DefaultIfEmpty

In JavaScript, filter returns an array of size 0 if no record is returned.
So I am checking for the size and return nullOrder if the length is 0.

🔸 Skip/SkipWhile

The callback in Array.prototype.filter also has an access to current index being process.
So the implementation for skip simply filters out records below the given count while skipWhile filters out records that do not match the predicate.

🔸 Take/TakeWhile

Take is the opposite of skip so the boolean conditions are reversed.

🔴 Closing Remark

JavaScript is dynamically typed so returning a “default” value is tricky as a variable type is defined upon initialization. I’ve skipped implementing “*OrDefault” methods for that reason.

Please let me know should you find any errors or improvements I can make to the codes.

The full source code and instructions on how to run them are on GitHub.