JSFiddle - React, Tailwind, and code Playground

HTML

<div class="menu">
<ul>
    <li><a href="#">Main Link 1</a></li>
    <li><a href="#">Main Link 2</a>
        <ul class="multicolumn">
            <li><a href="#">Sub Link 1</a></li>
            <li><a href="#">Sub Link 2</a></li>
            <li><a href="#">Sub Link 3</a></li>
            <li><a href="#">Sub Link 4</a></li>
            <li><a href="#">Sub Link 5</a></li>
            <li><a href="#">Sub Link 6</a></li>
            <li><a href="#">Sub Link 7</a></li>
            <li><a href="#">Sub Link 8</a></li>
            <li><a href="#">Sub Link 9</a></li>
            <li><a href="#">Sub Link 10</a></li>
            <li><a href="#">Sub Link 11</a></li>
            <li><a href="#">Sub Link 11</a></li>
            <li><a href="#">Sub Link 13</a></li>
            <li><a href="#">Sub Link 14</a></li>
            <li><a href="#">Sub Link 15</a></li>
            <li><a href="#">Sub Link 16</a></li>
            <li><a href="#">Sub Link 17</a></li>
            <li><a href="#">Sub Link 18</a></li>
        </ul>
    </li>
    <li><a href="#" >Main Item 3</a></li>
</ul>
</div>

CSS

.menu ul {
    list-style:none;
}

.menu li ul {
    width: 460px;
    overflow: hidden;
}

.menu li li {
    float: left;
    width: 100%;  /* 1 column - default*/
    height: 1.5em;
}

JavaScript

// number of columns
var columns = 4;

var $ul = $('ul.multicolumn'),
    $elements = $ul.children('li'),
    breakPoint = Math.round($elements.length/columns);
    $ordered = $('<div></div>');

function appendToUL(i) {
    if ($ul.children().eq(i).length > 0) {
        $ordered.append($ul.children().eq(i).clone());
    } 
    else $ordered.append($('<li></li>'));
}

function reorder($el) {
    $el.each(function(){
        $item = $(this);
        
        if ($item.index() >= breakPoint) return false;

        appendToUL($item.index());
        for (var i = 1; i < columns; i++) {
            appendToUL(breakPoint*i+$item.index());
        }
    });

    $ul.html($ordered.children().css('width',100/columns+'%'));
}

reorder($elements);