JSFiddle - React, Tailwind, and code Playground

by Glutamat

JavaScript

var sort = function (el) {
    var i = 0,ret;
    !sort.el && (sort.el = el);
    ret = el.sort (srt);
    if (sort.el != el) {
      var l = Math.max(el.length,sort.el.length);
      for (var j = 0;j<l;j++) {
          if (typeof el[j] === "object" && el[j] && el[j]._srt) {}
          delete el[j]._srt;
            if (typeof sort.el[j] === "object" && sort.el[j] && sort.el[j]._srt) {}
          delete sort.el[j]._srt;
      }
    }
    sort.el = el
    return ret;
    function srt (a,b,c) {
      var types = [typeof a,typeof b];
      var r = [0,0];
      
      if (types[0] === "object" && types[1] ===  "object") {

        if (el === sort.el) {
          !a._srt && (a._srt = ++i);
          !b._srt && (b._srt = ++i);
          r[0] = a._srt;
          r[1] = b._srt;         
        } else {
          a._srt && (r[0] = a._srt) 
          b._srt && (r[1] = b._srt) 
        }
        return r[0] - r[1];
      }
      if (types[0] == "object") {
        return 1;
      }
      if (types[1] == "object") {
        return -1;
      }
      return a>b?1:a<b?-1:0;   
    }
  }
  

var x = {a:1};
var y = {a:2};

var a = [1,x,2,3,y,4,x]
var b = [1,y,3,4,x,x,2]


sort(a)
sort(b)
console.log ("Consistent", a,b);