JSFiddle - React, Tailwind, and code Playground

by jongobar

HTML

<pre id="out"></pre>

JavaScript

var dbg=[];
dbg.targetNode=document.getElementById("out");
dbg.out=function (msg){
    if(msg){
        this.targetNode.textContent=msg; 
        return;   
    }
    this.targetNode.textContent=this.join('\n');
};

var list = [
    {str:'zzzzz',value:3},
    {str:'aaaaa',value:7},
    {str:'ccccc',value:1}
];
var sortedList=sortData(
    list,
    function(obj){return obj.str;},
    null
);
dbg.push(JSON.stringify(sortedList,null,"  "));
dbg.out();


function sortData(list,callbackDefereneceSortValue,callbackCompare){
    callbackDefereneceSortValue=callbackDefereneceSortValue||function(item){
        return item.trim().toLowerCase();
    };
	callbackCompare=callbackCompare||function(sortStringA,sortStringB){
		if(sortStringA < sortStringB){return -1;}
		if(sortStringA > sortStringB){return 1;}
		return 0;
	};
	var sortingWrapper=list.map(function(item){
		var sortString=callbackDefereneceSortValue(item);
		return {
			sortString:sortString,
            payload:item,
		};
	});
    sortingWrapper.sort(function(wrapperA,wrapperB){
		return callbackCompare(wrapperA.sortString,wrapperB.sortString);
	});    
	return sortingWrapper.map(function(wrapper){
		return wrapper.payload;
	}); 
}