Lodash is a very useful utility library that lets us work with objects and arrays easily.
However, now that the JavaScript standard library is catching up to libraries such as Lodash, we can implement many of the functions in simple ways.
In this article, we’ll look at how to implement a few Lodash methods with plain JavaScript.
dropRightWhile
The dropRightWhile
function lets us create a slice of an array starting from the right until a condition is met. The condition is determined by a callback.
We can implement it as follows with plain JavaScript as follows:
const dropRightWhile = (arr, condition) => {
const newArr = [];
for (let i = arr.length - 1; i >= 0; i--) {
if (condition(arr[i])) {
return newArr;
}
newArr.push(arr[i]);
}
return newArr;
}
In the code above, we have a for
loop that’s looped through in reverse. If the condition
function, which takes an array entry as the value returns true
, then we return newArr
, which has the items that are pushed into the array that we want to keep.
If the loop finishes without returning newArr
, then it’ll also return newArr
.
Therefore, when we have:
const arr = [1, 2, 3]
const dropped = dropRightWhile(arr, (a) => a === 2)
We get that dropped
is [3]
since we stopped the function when the callback condition is met, which is when an array entry is 2.
dropRightWhile
can also take a string with the key name to check if it’s true
before returning the sliced array.
We can add that check easily with the following code:
const dropWhile = (arr, key) => {
const newArr = [];
for (let i = arr.length - 1; i >= 0; i--) {
if (arr[i][key]) {
return newArr;
}
newArr.push(arr[i]);
}
return newArr;
}
Then when we have the following array and call it as follows:
const arr = [{
name: 'foo',
active: false
},
{
name: 'bar',
active: true
},
{
name: 'baz',
active: false
}
]
const dropped = dropRightWhile(arr, 'active');
We get:
[
{
"name": "foo",
"active": false
}
]
since we return the array where we push the entries from the right until active
is true
.
dropWhile
dropWhile
is the opposite of dropRightWhile
. It gets a slice of an array by starting from the beginning and pushing those items into a new array, and returning it either when the loop finishes or when the condition in the callback returns true
.
Like dropRightWhile
, the callback takes an array entry. For instance, we can implement it ourselves as follows:
const dropWhile = (arr, condition) => {
const newArr = [];
for (const a of arr) {
if (condition(a)) {
return newArr;
}
newArr.push(a);
}
return newArr;
}
In the code above, we used the for...of
loop instead of a regular for
loop since we’re just looping through arr
forward, which can be done easily with for
loop.
dropWhile
can also take a string with the key name to check if it’s true
before returning the sliced array.
We can add that check easily with the following code:
const dropWhile = (arr, key) => {
const newArr = [];
for (const a of arr) {
if (a[key]) {
return newArr;
}
newArr.push(a);
}
return newArr;
}
Then when we have the following array and call it as follows:
const arr = [{
name: 'foo',
active: false
},
{
name: 'bar',
active: true
},
{
name: 'baz',
active: false
}
]
const dropped = dropWhile(arr, 'active');
We get:
[
{
"name": "foo",
"active": false
}
]
since we return the array where we push the entries until active
is true
.
fill
The fill
method fills the element of an array with values from the start but not up to the end index by replacing the values from the original array with the one that we provide starting from a starting index and ending with the end index.
We can implement fill
as follows:
const fill = (arr, value, start, end) => arr.fill(valu, start, end)
In the code above, we have 4 arguments like the Lodash’s fill
method, which are arr
for the original array, value
which is the value we want to fill the array with. start
, which is the starting index of array entry we’re replacing, and end
, which is the end index of the array we’re replacing the values with.
Then when we call the fill
as follows:
const filled = fill([1, 2, 3, 4, 5], 8, 0, 3);
We get that filled
is:
[8, 8, 8, 4, 5]
As we can see, the array instance’s fill
method does the same job as Lodash’s fill
.
Conclusion
We can implement dropWhile
, dropRightWhile
, and fill
easily with plain JavaScript’s array methods. With a few lines of code, we eliminated the need to use Lodash array methods.