JSFiddle - React, Tailwind, and code Playground

by Jimmy Sawczuk

HTML

<script src=" https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.1/underscore-min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<div id="ctr"></div>

JavaScript

function cleanUpDefinition(arg) {
    var obj = JSON.parse(arg);
    return JSON.stringify(_cleanUpDefinition(obj));
}

function _cleanUpDefinition(definition) {
    var mine = extract(definition);
    if (mine.type != "$all" && mine.type != "$any") {
        return;
    }

    _.each(mine.payload, _.bind(function (qualifier, insert_index) {
        qualifier = _cleanUpDefinition(qualifier);

        var child = extract(qualifier);

        if (child.type == mine.type) {
            var temp = [];
            _.each(child.payload, function (qu) {
                temp.push(qu);
            });
            mine.payload.splice(insert_index, 1);
            _.each(temp, function (qu) {
                mine.payload.splice(insert_index, 0, qu);
            });
        }
    }, this));

    var obj = {};
    obj[mine.type] = mine.payload;
    return obj;
}

function extract(qualifier) {
    var obj = {
        type: null,
        payload: null
    };

    var i = 0;
    _.each(qualifier, function (value, key) {
        obj = {
            type: key,
            payload: value
        };

        if (i++ > 0) {
            console.warn("Qualifier has more than one type: ", qualifier);
        }
    });

    return obj;
}

$('#ctr').html(cleanUpDefinition('{"$all":[{"$all":[]},{"$all":[{"$nps":{"ratings":[],"pages":["164044345663"]}}]}]}'));