function store_value(obj, store, tree, pos, key, custom) {

    obj = obj[key];

    if (pos === tree.length - 1) {

        store[key] = custom || obj;
    } else if (obj) {

        if (is_array(obj)) {

            store = store[key] = Array(obj.length);

            for (let i = 0; i < obj.length; i++) {

                store_value(obj, store, tree, pos, i);
            }
        } else {

            store = store[key] || (store[key] = create_object());
            key = tree[++pos];
            store_value(obj, store, tree, pos, key);
        }
    }
}
@param obj
@param store
@param tree
@param pos
@param key
@param {*=} custom