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"]}}]}]}'));