Skip to content Skip to sidebar Skip to footer

Lodash _.get Function In Typescript

I get the feeling after some googling that a lot of lodash's functions can be achieved with native typescript but i cannot find a straightforward answer for the _.get function... I

Solution 1:

In plain Javascript you could split the path and reduce the path by walking the given object.

functiongetValue(object, path) {
    return path.
        replace(/\[/g, '.').
        replace(/\]/g, '').
        split('.').
        reduce((o, k) => (o || {})[k], object);
}

var obj = { a: { b: 1 } },
    a = getValue(obj, 'a.b');

console.log(a);

Solution 2:

/**
 * Get value of a property from a nested object.
 * Example:
 * var x = { a: {b: "c"} };
 * var valueOf_b = getDeepValue(x, ["a", "b"]);
 *
 * @param  {object}     Object           The Object to get value from
 * @param  {KeyArray}   Array[String]    An array of nested properties. ex. ["property", "childProperty"]
 */const getDeepValue = (object, keyArray) => {
    const extractValue = (obj, kArray) => {
        const objProperty = obj[kArray[0]];
        if (kArray.length >= 1) {
            const newKeyArray = kArray.splice(1, kArray.length);
            if (newKeyArray.length === 0) return objProperty;
            return extractValue(objProperty, newKeyArray);
        }
        return objProperty;
    };

    try {
        const value = extractValue(object, keyArray.slice());
        if (value === undefined || typeof value === 'object') {
            console.warn("Unable to retrieve value from object for key ", keyArray);
            return'';
        } else {
            return value;
        }
    } catch (e) {
        console.warn("Exception: Unable to retrieve value from object for key ", keyArray);
        return'';
    }
};

Solution 3:

Maybe slightly cleaner alternative using an ES6 default parameter:

constget = (o, path) => path.split('.').reduce((o = {}, key) => o[key], o);
console.log(get({ a: { b: 43 } }, 'a.b')); // 43

The above digs all the way to the bottom even when it encounters undefined. An alternative is recursion, you'll have to split before invoking it:

function get(object, [head, ...tail]) {
    object = object[head];
    return tail.length && object ? get(object, tail) : object;
}

console.log(get({ a: { b: 43 } }, 'a.b'.split('.'))); // 43

Post a Comment for "Lodash _.get Function In Typescript"