## DEV Community is a community of 606,348 amazing developers

We're a place where coders share, stay up-to-date and grow their careers.

# #7DaysJS: Where is My Element

Lautaro Lobo Originally published at lautarolobo.xyz on ・1 min read

Welcome to day 5 of 7 Days of JavaScript! Today we will code a classic function that:

• Takes two parameters: an element and an array of elements
• Returns the position of the element inside the array. If the element is not in the array, returns -1.

Wish you luck!

You can see the solution here.

## Discussion (2)

Amin

Recursive solution with runtime type checking.

``````"use strict";

/**
* Find the index of an element in an array
* @param {unknown} element Element to search
* @param {unknown[]} elements Elements in which to search from
* @param {number} position Starting position (default to 0)
* @throws {TypeError} If the second argument is not an array
* @throws {TypeError} If the third argument is not an integer
* @throws {RangeError} If the third argument is lower than zero
* @return {number} -1 if the element is not found, the index otherwise
* @example index(1, [-1, 0, 1, 2, 3]); // 2
* @example index(2, [-1, 0, 1, 2, 3]); // 3
* @example index(5, [-1, 0, 1, 2, 3]); // -1
*/
function index(element, elements, position = 0) {
if (!Array.isArray(elements)) {
throw new TypeError("Expected second argument to be an array");
}

if (!Number.isInteger(position)) {
throw new TypeError("Expected integer for the third argument");
}

if (position < 0) {
throw new RangeError("Expected third argument to be greater or equal to zero");
}

if (elements.length === 0) {
return -1;
}

/**
* @const {unknown} current The first elements of the array
* @const {unknown} rest All elements except the first one
*/
const [current, ...rest] = elements;

if (current === element) {
return position;
}

return index(element, rest, position + 1);
}

console.log(index(1, [-1, 0, 1, 2, 3])); // 2
console.log(index(2, [-1, 0, 1, 2, 3])); // 3
console.log(index(5, [-1, 0, 1, 2, 3])); // -1
``````