June 17, 2017Last modified May 9, 2025

Javascript code snippets

Array flattener

Implement a function flatten that returns a newly-created array with all sub-array elements concatenated recursively into a single level.

export default function flatten(value) {
if (!Array.isArray(value)) {
return [value];
}

let flattenedArray = [];

for (let i = 0; i < value.length; i++) {
if (Array.isArray(value[i])) {
flattenedArray = flattenedArray.concat(flatten(value[i]));
} else {
flattenedArray.push(value[i]);
}
}

return flattenedArray;
}
export default function flatten(value) {
if (!Array.isArray(value)) {
return [value];
}

let flattenedArray = [];

for (let i = 0; i < value.length; i++) {
if (Array.isArray(value[i])) {
flattenedArray = flattenedArray.concat(flatten(value[i]));
} else {
flattenedArray.push(value[i]);
}
}

return flattenedArray;
}

Deep equal

Implement a function deepEqual that performs a deep comparison between two values. It returns true if two input values are deemed equal, and returns false if not.

export default function deepEqual(a, b) {

// case - both values are same in type and value
if (a === b) {
return true;
}

// case - both values have different type
if (Array.isArray(a) !== Array.isArray(b)) {
return false;
}

// case - no value is null
if (
a === null ||
typeof a !== "object" ||
b === null ||
typeof b !== "object"
) {
return false;
}

const keysA = Object.keys(a);
const keysB = Object.keys(b);

// case - both objects have diff no of keys
if (keysA.length !== keysB.length) {
return false;
}

for (const k of keysA) {
// case - values of both keys are same
if (!keysB.includes(k) || !deepEqual(a[k], b[k])) {
return false;
}
}

return true;
}
export default function deepEqual(a, b) {

// case - both values are same in type and value
if (a === b) {
return true;
}

// case - both values have different type
if (Array.isArray(a) !== Array.isArray(b)) {
return false;
}

// case - no value is null
if (
a === null ||
typeof a !== "object" ||
b === null ||
typeof b !== "object"
) {
return false;
}

const keysA = Object.keys(a);
const keysB = Object.keys(b);

// case - both objects have diff no of keys
if (keysA.length !== keysB.length) {
return false;
}

for (const k of keysA) {
// case - values of both keys are same
if (!keysB.includes(k) || !deepEqual(a[k], b[k])) {
return false;
}
}

return true;
}

getElementsByClassName() Implementation

getElementsByClassName() is a method which exists on HTML Documents and Elements to return an HTMLCollection of descendant elements within the Document/Element which has the specified class name(s).

export default function getElementsByClassName(element, classNames) {
let elements = [];
const classes = new Set(classNames.trim().split(/\s+/));

function isSubset(a, b) {
return Array.from(a).every((cls) => b.contains(cls));
}

function traverse(el) {
// case - all nodes traversed
if (el == null) {
return;
}

// case - if element contains all classes
if (isSubset(classes, el.classList)) {
elements.push(el);
}

for (const child of el.children) {
traverse(child);
}
}

for (const ch of element.children) {
traverse(ch);
}

return elements;
}
export default function getElementsByClassName(element, classNames) {
let elements = [];
const classes = new Set(classNames.trim().split(/\s+/));

function isSubset(a, b) {
return Array.from(a).every((cls) => b.contains(cls));
}

function traverse(el) {
// case - all nodes traversed
if (el == null) {
return;
}

// case - if element contains all classes
if (isSubset(classes, el.classList)) {
elements.push(el);
}

for (const child of el.children) {
traverse(child);
}
}

for (const ch of element.children) {
traverse(ch);
}

return elements;
}

JSON.stringify

Implement a function jsonStringify, similar to JSON.stringify that converts a JavaScript value into a JSON string.

export default function jsonStringify(value) {
if (value === null) return "null";

let valueType = typeof value;

if (Array.isArray(value)) {
valueType = "array";
}

switch (valueType) {
case "array":
const allVals = value.map((v) => jsonStringify(v)).join(",");
return `[${allVals}]`;
case "object":
const objVals = Object.entries(value)
.map(([key, value]) => `"${key}":${jsonStringify(value)}`)
.join(",");
return `{${objVals}}`;
case "string":
return `"${value}"`;
default:
return String(value);
}
}
export default function jsonStringify(value) {
if (value === null) return "null";

let valueType = typeof value;

if (Array.isArray(value)) {
valueType = "array";
}

switch (valueType) {
case "array":
const allVals = value.map((v) => jsonStringify(v)).join(",");
return `[${allVals}]`;
case "object":
const objVals = Object.entries(value)
.map(([key, value]) => `"${key}":${jsonStringify(value)}`)
.join(",");
return `{${objVals}}`;
case "string":
return `"${value}"`;
default:
return String(value);
}
}