JSFiddle - React, Tailwind, and code Playground

by Akihiko Kusanagi

JavaScript

function resolve(object, key) {
    let first = key.split(/\.|(?=\[)/)[0];
    const rest = key.slice(first.length).replace(/^\./, '');

    if (Array.isArray(object) && first.match(/^\[-?\d+\]$/)) {
        first = +first.slice(1, -1);
        if (first < 0) {
            first = object.length + first;
        }
    }
    if (first in object && rest) {
        return resolve(object[first], rest);
    }
    return object[first];
}

const obj = {c:[{a: 'aaa'}, {a: 'bbb'}]}
alert(resolve(obj, 'c[-1].a'))