DEV Community

Cover image for Mastering JavaScript: Deep Dive into Array Tooling.πŸš€πŸš€
Dharmendra Kumar
Dharmendra Kumar

Posted on

Mastering JavaScript: Deep Dive into Array Tooling.πŸš€πŸš€

Introduction

JavaScript arrays are a powerful feature of the language, offering numerous built-in methods and the ability to create custom ones. This post explores advanced array manipulation techniques, including property definitions, custom methods, and various loop constructs. We will use a sample array to demonstrate these techniques in detail.

Creating and Displaying Arrays

To begin with, let's create an array and log its contents to the console.

let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; // Initialize an array with values from 1 to 10
console.log(arr); // Output the entire array to the console
Enter fullscreen mode Exit fullscreen mode

Points:

  • let arr initializes an array with values from 1 to 10.
  • console.log(arr) outputs the entire array to the console.

Custom Array Property: Mylength

JavaScript allows us to define custom properties on array prototypes. Here, we create a custom property Mylength to count the elements of the array.

Object.defineProperty(Array.prototype, 'Mylength', {
  get() {
    let count = 0; // Initialize a counter
    for (const _ of this) {
      count++; // Increment the counter for each element in the array
    }
    return count; // Return the final count
  }
});

console.log(arr.Mylength); // Log the length of the array using the custom property
Enter fullscreen mode Exit fullscreen mode

Points:

  • Object.defineProperty is used to define a new property on the Array.prototype.
  • get() method iterates through the array, counting each element.
  • console.log(arr.Mylength) logs the length of the array using the custom property.

Custom Array Method: myForEach

We can also define custom methods for arrays. The following code defines myForEach, a custom implementation of the built-in forEach method.

Array.prototype.myForEach = function myForEach(callback) {
  for (let i = 0; i < this.length; i++) {
    callback(this[i], i, this); // Execute the callback for each element in the array
  }
};

arr.myForEach(function(item) {
  console.log(item); // Log each element to the console
});
Enter fullscreen mode Exit fullscreen mode

Points:

  • Array.prototype.myForEach adds a new method to the array prototype.
  • callback function is executed for each element of the array.
  • console.log(item) within the callback logs each element to the console.

Looping Through Arrays

JavaScript provides several ways to loop through arrays. Let's explore each method:

for...of Loop

The for...of loop iterates over the values of an array.

for (const value of arr) {
  console.log(value); // Log each element to the console
}
Enter fullscreen mode Exit fullscreen mode

Points:

  • for (const value of arr) iterates over each element in the array.
  • console.log(value) logs each element to the console.

Traditional for Loop

The traditional for loop provides a more controlled iteration by using an index.

for (let index = 0; index < arr.length; index++) {
  const element = arr[index]; // Access the current element by index
  console.log(element); // Log each element to the console
}
Enter fullscreen mode Exit fullscreen mode

Points:

  • for (let index = 0; index < arr.length; index++) iterates from 0 to the length of the array.
  • const element = arr[index] accesses the current element by index.
  • console.log(element) logs each element to the console.

for...in Loop

The for...in loop iterates over the enumerable properties of an array, including non-indexed properties.

for (const key in arr) {
  if (Object.hasOwnProperty.call(arr, key)) { // Check if the property is an own property of the array
    const element = arr[key]; // Access the element corresponding to the current key
    console.log(element); // Log each element to the console
  }
}
Enter fullscreen mode Exit fullscreen mode

Points:

  • for (const key in arr) iterates over the properties of the array.
  • Object.hasOwnProperty.call(arr, key) ensures only the array's own properties are accessed.
  • const element = arr[key] accesses the element corresponding to the current key.
  • console.log(element) logs each element to the console.

Difference Between for...in Variants

There are subtle differences between the two variants of the for...in loop shown above. The first variant uses an additional check to ensure that only the array's own properties are accessed, while the second variant does not include this check.

Variant 1:

for (const key in arr) {
  if (Object.hasOwnProperty.call(arr, key)) { // Check if the property is an own property of the array
    const element = arr[key]; // Access the element corresponding to the current key
    console.log(element); // Log each element to the console
  }
}
Enter fullscreen mode Exit fullscreen mode

Points:

  • This loop ensures that only the array's own properties are accessed, not inherited properties.
  • This is useful to avoid logging properties that might be added to the array's prototype.

Example:

Array.prototype.customProp = "I am a prototype property";
for (const key in arr) {
  if (Object.hasOwnProperty.call(arr, key)) {
    const element = arr[key];
    console.log(element);
  }
}
// Logs 1 to 10, but ignores 'customProp'
Enter fullscreen mode Exit fullscreen mode

Variant 2:

for (const key in arr) {
  const element = arr[key]; // Access the element corresponding to the current key
  console.log(element); // Log each element to the console
}
Enter fullscreen mode Exit fullscreen mode

Points:

  • This loop accesses all enumerable properties, including inherited ones, which can lead to unexpected results if the array inherits properties from its prototype.
  • This can be useful if you explicitly want to include properties inherited from the prototype.

Example:

Array.prototype.customProp = "I am a prototype property";
for (const key in arr) {
  const element = arr[key];
  console.log(element);
}
// Logs 1 to 10, followed by "I am a prototype property"
Enter fullscreen mode Exit fullscreen mode

Conclusion

In this post, we've covered advanced techniques for array manipulation in JavaScript, including custom properties and methods, and various loop constructs. We also explored the differences between two variants of the for...in loop. These tools enhance the flexibility and power of arrays, enabling more efficient and expressive code.

Understanding these techniques can greatly improve your JavaScript programming skills, allowing you to write more versatile and maintainable code. Happy coding!

Top comments (1)