let colors = 'red2 green3 white2' 

// 根据属性的数字排序
function done(key,desc) {

  return function(a,b){

    //return desc ? ~~(parseInt(a[key]) < parseInt(b[key])) : ~~(parseInt(a[key]) > parseInt(b[key]));解决简单的json数组还行,但是遇到复杂重复比较多的数就不行了

    return desc ? ((parseInt(a[key]) < parseInt(b[key]))?1:((parseInt(a[key]) > parseInt(b[key]))?-1:0)):((parseInt(a[key]) < parseInt(b[key]))?-1:((parseInt(a[key]) > parseInt(b[key]))?1:0))  //杠杠的,注意括号就是!

  }

}

let solution = function (a) {

    let arr = a.split(' ')
    let indexArr = []
    for (let i in arr) {
        let obj = {
              index: arr[i].substr(-1),
               text:arr[i].slice(0,arr[i].length-1)
        }
        indexArr.push(obj)
    }

    indexArr.sort(done('index',false))
    let result = []
    for(let i in indexArr) {
        result.push(indexArr[i]['text'])
    }
    result.join(' ')
    let aaa = result.join(' ').toString()
    return aaa
}

solution(colors)

这是一个归纳总结了的,可字符可数字排序!

var sortBy=function (filed,rev,primer){
  rev = (rev) ? -1 : 1;
  return function (a, b) {
    a = a[filed];
    b = b[filed];
    if (typeof (primer) != 'undefined') {
      a = primer(a);
      b = primer(b);
    }
    if (a < b) { return rev * -1; }
    if (a > b) { return rev * 1; }
    return 1;
  }
};
var obj=[
  {b: '3', c: 'c'},
  {b: '1', c: 'a'},
  {b: '2', c: 'b'}
];
obj.sort(sortBy('b',false,parseInt));
console.log(obj);