Create an array which contains specific values of a specific nested object inside an array
You could use _.reduce() (or alternatively native Array.reduce()) to achieve this:

const workflow = _.reduce(
    template_columns,
    (colResult, colValue) =&gt; {
        return colResult.concat(
            _.reduce(
                colValue.workflow,
                (workflowResult, workflowValue) =&gt; workflowValue.action,
                []
            );
        );
    },
    []
);


or

const workflow = template_columns.reduce(
    (colResult, colValue) =&gt; {
        return colResult.concat(
            colValue.workflow.reduce(
                (workflowResult, workflowValue) =&gt; workflowValue.action,
                []
            );
        );
    },
    []
);


Note, use of arrow functions is optional, but since you indicated you are writing for ES6 and transpiling, and since the callback logic is so simple here, I thought the arrow function made sense.

Alternately, you might perform reduce then map like this:

const workflow = _.map(
    _.reduce(
        template_columns,
        (result, value) =&gt; result.concat(value.workflow),
        []
    ),
    val =&gt; val.action
 );


This approach is actually similar to your current approach, using _reduce() rather than combination of _.flatten and _.map inside the outer _map() call.

Perhaps try it both ways (as well as your original approach) and see where you get best performance, based on the typical data you are working with.