DEV Community

Mehul Lakhanpal
Mehul Lakhanpal

Posted on

πŸ”₯ Upstox Frontend Interview (R1) for JavaScript Developers

πŸ’‘ Topics they asked me & my solutions:

** Note: This is exactly the answers that I provided during the interview. **

βœ… What is a closure?

const counter = () => {
    let count = 0;

    const inner = () => {
        count++;
        return count
    }

    count = 2;

    return inner;
}

const c = counter();

console.log(c()); // 3
Enter fullscreen mode Exit fullscreen mode

βœ… Predict setTimeout output

for (var i = 0; i < 3; i++) {
    setTimeout(function log() {
        console.log(i);
    }, 1000);
}
Enter fullscreen mode Exit fullscreen mode

βœ… Implement currying for sum

const sum = (arg) => {
    let total = 0;

    const inner = (n) => {
        if (n) {
            total += n;
            return inner;
        } else {
            return total;
        }
    };

    if (arg) {
        total += arg;
    }
    return inner;
};

console.log('Currying : ', sum(1)(2)(3)()) // 6
Enter fullscreen mode Exit fullscreen mode

βœ… Build custom .map

Array.prototype.mapV2 = function(fn) {
    const results = [];

    for (let i = 0; i < this.length; i++) {
        const response = fn(this[i]);
        results.push(response);
    }
    return results;
};

const addOne = n => n + 1;

const r = [1, 2, 3].mapV2(addOne);

console.log(r);
Enter fullscreen mode Exit fullscreen mode

βœ… Create _.get from lodash

const obj = {
    A: {
        B: {
            c: 10
        }
    }
}

const get = (obj, path) => {
    const pathArr = path.split('.'); // ['A', 'B', 'c']

    const getValue = (obj, pathArr) => {
        const [firstPath, ...rest] = pathArr;
        const value = obj[firstPath];

        if (typeof value === 'object') {
            return getValue(value, rest);
        } else {
            return value;
        }
    };

    return getValue(obj, pathArr);
};

console.log(get(obj, 'A.B.c'));
console.log(get(obj, 'A.B.d'));
Enter fullscreen mode Exit fullscreen mode

βœ… Format characters: Split string into ≀9 char blocks
Given an input string, print the total number of characters.
If characters are more than 9 then split it into multiple block.
ex., if there are 10 consecutive 'A's then it should print '9A1A' instead of '10A'

const format = (str) => {
    let tempChar, count;
    const result = [];

    for (let i = 0; i < str.length; i++) {
        const char = str[i];

        if (!tempChar) {
            tempChar = char;
            count = 0;
        }

        if (tempChar === char && count < 9) {
            count++;
        } else {
            result.push(`${count}${tempChar}`)
            tempChar = char;
            count = 1;
        }
    }
    result.push(`${count}${tempChar}`)

    return result.join('');
};

console.log(format('AAAABBCCCCC')) // 4A2B5C
console.log(format('AAAAAAAAAA')) // 9A1A
Enter fullscreen mode Exit fullscreen mode

βœ… Rearrange array: Move target elements to end
Given an array and a target element, move all the target element to the end of the array.

const organize = (arr, target) => {
    let totalTargets = 0;
    const result = arr.filter(item => {
        if (item === target) {
            totalTargets++;
        }
        return item !== target;
    });
    return [...result, ...Array(totalTargets).fill(target)];
};

console.log(organize([2, 1, 2, 3, 4, 1, 2], 2)) // [1,3,4,1,2,2,2]
Enter fullscreen mode Exit fullscreen mode

πŸ”— Questions + Solutions here:

πŸ‘‰ Replit – Upstox R1

🧠 Master these to crack your next JS interview.

Top comments (0)