JavaScript稳定排序问题

JavaScript稳定排序问题,javascript,Javascript,我在这个话题上四处寻找帮助,但找不到帮助或指导。 我的问题是,我试图对一系列由等号分隔的值执行排序 “Foo=Bar,sheangians=Fun,A=B…等等” 我当前的排序有效,但只有在没有相同的值时才有效。如果我有一些价值观,比如: “Foo=Bar,A=Bar,Potato=Bar” 排序完成后,它们都将是“A=Bar” 我现在的类型看起来像这样,有人能给我指出正确的方向吗 $('#sortByValue')。单击(函数(){ var textValueArray=document.g

我在这个话题上四处寻找帮助,但找不到帮助或指导。 我的问题是,我试图对一系列由等号分隔的值执行排序

“Foo=Bar,sheangians=Fun,A=B…等等”

我当前的排序有效,但只有在没有相同的值时才有效。如果我有一些价值观,比如:

“Foo=Bar,A=Bar,Potato=Bar”

排序完成后,它们都将是“A=Bar”

我现在的类型看起来像这样,有人能给我指出正确的方向吗

$('#sortByValue')。单击(函数(){
var textValueArray=document.getElementById('nameValuePairList');
textArray=新数组();
valueArray=新数组();
oldValues=新数组();
对于(i=0;i});直接对textArray排序,不要使用valueArray,因为它将包含重复项:

textArray.sort(function(a,b){
    var aa = a.split('=')
    var bb = b.split('=')

    var a_key = aa[0].toLowerCase(), a_val = aa[1].toLowerCase();
    var b_key = bb[0].toLowerCase(), b_val = bb[1].toLowerCase();

    if (a_val == b_val) return a_key.localeCompare(b_key);

    return a_val.localeCompare(b_val);
})

直接对textArray排序,不要使用valueArray,因为它将包含重复项:

textArray.sort(function(a,b){
    var aa = a.split('=')
    var bb = b.split('=')

    var a_key = aa[0].toLowerCase(), a_val = aa[1].toLowerCase();
    var b_key = bb[0].toLowerCase(), b_val = bb[1].toLowerCase();

    if (a_val == b_val) return a_key.localeCompare(b_key);

    return a_val.localeCompare(b_val);
})

我会这样做:

document.getElementById('sortByName').onclick = sortByName;
function sortByName(){
    var myList = document.getElementById('list');
    var values = [];
    for (var i=0;i<myList.options.length;i++) {
        values[i] = myList.options[i].text;
    }
      values.sort(function (a, b){
            if(a !== "" && b !== ""){
                return a.split('=')[0].localeCompare(b.split('=')[0]);
            } else {
                return 0;
            }
        });
    clearList(myList);

    fillList(myList, values);
}

function clearList(list) {
    while (list.options.length > 0) {
        list.options[0] = null;
    }
}

function fillList(myList, values){
    for (var i=0;i<values.length;i++) {
        var option = document.createElement("option");
        option.text = values[i];
        myList.options[i] = option;
    }
}
function inArray(v, a){
  for(var i=0,l=a.length; i<l; i++){
    if(a[i] === v){
      return true;
    }
  }
  return false;
}
function sortWeirdString(str){
  var pairs = str.split(/\s?,\s?/), n = [], v = [], c = [], ci, idx = [], cl, nv = [], ra = [];
  for(var i=0,l=pairs.length; i<l; i++){
    var pair = pairs[i].split(/\s?=\s?/);
    n.push(pair[0]); v.push(pair[1]);
  }
  c = n.concat().sort(); cl = c.length
  for(var i=0; i<cl; i++){
    var cv = c[i];
    if(n.indexOf){
      ci = n.indexOf(cv);
      if(inArray(ci, idx)){
        ci = n.indexOf(cv, ci+1);
      }
      idx.push(ci);
    }
    else{
      for(var x=0; x<cl; x++){
        if(n[x] === cv){
          if(inArray(x, idx)){
            continue;
          }
          idx.push(x);
        }
      }
    }
  }
  for(var i=0,l=idx.length; i<l; i++){
    ra.push(c[i]+'='+v[idx[i]]);
  }
  return ra.join(', ');
}
$('#sortByValue').click(function(){
  console.log(sortWeirdString($('#nameValuePairList').val()));
}
document.getElementById('sortByName')。onclick=sortByName;
函数sortByName(){
var myList=document.getElementById('list');
var值=[];
对于(变量i=0;i 0){
list.options[0]=null;
}
}
函数填充列表(myList,值){

对于(var i=0;i我会这样做:

document.getElementById('sortByName').onclick = sortByName;
function sortByName(){
    var myList = document.getElementById('list');
    var values = [];
    for (var i=0;i<myList.options.length;i++) {
        values[i] = myList.options[i].text;
    }
      values.sort(function (a, b){
            if(a !== "" && b !== ""){
                return a.split('=')[0].localeCompare(b.split('=')[0]);
            } else {
                return 0;
            }
        });
    clearList(myList);

    fillList(myList, values);
}

function clearList(list) {
    while (list.options.length > 0) {
        list.options[0] = null;
    }
}

function fillList(myList, values){
    for (var i=0;i<values.length;i++) {
        var option = document.createElement("option");
        option.text = values[i];
        myList.options[i] = option;
    }
}
function inArray(v, a){
  for(var i=0,l=a.length; i<l; i++){
    if(a[i] === v){
      return true;
    }
  }
  return false;
}
function sortWeirdString(str){
  var pairs = str.split(/\s?,\s?/), n = [], v = [], c = [], ci, idx = [], cl, nv = [], ra = [];
  for(var i=0,l=pairs.length; i<l; i++){
    var pair = pairs[i].split(/\s?=\s?/);
    n.push(pair[0]); v.push(pair[1]);
  }
  c = n.concat().sort(); cl = c.length
  for(var i=0; i<cl; i++){
    var cv = c[i];
    if(n.indexOf){
      ci = n.indexOf(cv);
      if(inArray(ci, idx)){
        ci = n.indexOf(cv, ci+1);
      }
      idx.push(ci);
    }
    else{
      for(var x=0; x<cl; x++){
        if(n[x] === cv){
          if(inArray(x, idx)){
            continue;
          }
          idx.push(x);
        }
      }
    }
  }
  for(var i=0,l=idx.length; i<l; i++){
    ra.push(c[i]+'='+v[idx[i]]);
  }
  return ra.join(', ');
}
$('#sortByValue').click(function(){
  console.log(sortWeirdString($('#nameValuePairList').val()));
}
document.getElementById('sortByName')。onclick=sortByName;
函数sortByName(){
var myList=document.getElementById('list');
var值=[];
对于(变量i=0;i 0){
list.options[0]=null;
}
}
函数填充列表(myList,值){

对于(var i=0;i这样做背后的原因会让你想知道为什么,在将来。我想你想要这样的东西:

document.getElementById('sortByName').onclick = sortByName;
function sortByName(){
    var myList = document.getElementById('list');
    var values = [];
    for (var i=0;i<myList.options.length;i++) {
        values[i] = myList.options[i].text;
    }
      values.sort(function (a, b){
            if(a !== "" && b !== ""){
                return a.split('=')[0].localeCompare(b.split('=')[0]);
            } else {
                return 0;
            }
        });
    clearList(myList);

    fillList(myList, values);
}

function clearList(list) {
    while (list.options.length > 0) {
        list.options[0] = null;
    }
}

function fillList(myList, values){
    for (var i=0;i<values.length;i++) {
        var option = document.createElement("option");
        option.text = values[i];
        myList.options[i] = option;
    }
}
function inArray(v, a){
  for(var i=0,l=a.length; i<l; i++){
    if(a[i] === v){
      return true;
    }
  }
  return false;
}
function sortWeirdString(str){
  var pairs = str.split(/\s?,\s?/), n = [], v = [], c = [], ci, idx = [], cl, nv = [], ra = [];
  for(var i=0,l=pairs.length; i<l; i++){
    var pair = pairs[i].split(/\s?=\s?/);
    n.push(pair[0]); v.push(pair[1]);
  }
  c = n.concat().sort(); cl = c.length
  for(var i=0; i<cl; i++){
    var cv = c[i];
    if(n.indexOf){
      ci = n.indexOf(cv);
      if(inArray(ci, idx)){
        ci = n.indexOf(cv, ci+1);
      }
      idx.push(ci);
    }
    else{
      for(var x=0; x<cl; x++){
        if(n[x] === cv){
          if(inArray(x, idx)){
            continue;
          }
          idx.push(x);
        }
      }
    }
  }
  for(var i=0,l=idx.length; i<l; i++){
    ra.push(c[i]+'='+v[idx[i]]);
  }
  return ra.join(', ');
}
$('#sortByValue').click(function(){
  console.log(sortWeirdString($('#nameValuePairList').val()));
}
函数inaray(v,a){

对于(var i=0,l=a.length;i这样做背后的原因会让你想知道为什么,在将来。我想你想要这样的东西:

document.getElementById('sortByName').onclick = sortByName;
function sortByName(){
    var myList = document.getElementById('list');
    var values = [];
    for (var i=0;i<myList.options.length;i++) {
        values[i] = myList.options[i].text;
    }
      values.sort(function (a, b){
            if(a !== "" && b !== ""){
                return a.split('=')[0].localeCompare(b.split('=')[0]);
            } else {
                return 0;
            }
        });
    clearList(myList);

    fillList(myList, values);
}

function clearList(list) {
    while (list.options.length > 0) {
        list.options[0] = null;
    }
}

function fillList(myList, values){
    for (var i=0;i<values.length;i++) {
        var option = document.createElement("option");
        option.text = values[i];
        myList.options[i] = option;
    }
}
function inArray(v, a){
  for(var i=0,l=a.length; i<l; i++){
    if(a[i] === v){
      return true;
    }
  }
  return false;
}
function sortWeirdString(str){
  var pairs = str.split(/\s?,\s?/), n = [], v = [], c = [], ci, idx = [], cl, nv = [], ra = [];
  for(var i=0,l=pairs.length; i<l; i++){
    var pair = pairs[i].split(/\s?=\s?/);
    n.push(pair[0]); v.push(pair[1]);
  }
  c = n.concat().sort(); cl = c.length
  for(var i=0; i<cl; i++){
    var cv = c[i];
    if(n.indexOf){
      ci = n.indexOf(cv);
      if(inArray(ci, idx)){
        ci = n.indexOf(cv, ci+1);
      }
      idx.push(ci);
    }
    else{
      for(var x=0; x<cl; x++){
        if(n[x] === cv){
          if(inArray(x, idx)){
            continue;
          }
          idx.push(x);
        }
      }
    }
  }
  for(var i=0,l=idx.length; i<l; i++){
    ra.push(c[i]+'='+v[idx[i]]);
  }
  return ra.join(', ');
}
$('#sortByValue').click(function(){
  console.log(sortWeirdString($('#nameValuePairList').val()));
}
函数inaray(v,a){

对于(变量i=0,l=a.length;i更新2019

规范,现在是一个稳定的排序

此数组的元素已排序。排序必须是稳定的(即 即,比较相等的元素必须保持其原始顺序)


这已经是2019年的更新了

规范,现在是一个稳定的排序

此数组的元素已排序。排序必须是稳定的(即 即,比较相等的元素必须保持其原始顺序)


这已经是

您希望排序的结果是什么?对于{A=C,Test=Bar,Code=Fun,Foo=Bar}的输入,完成的排序应该是这样的。{Foo=Bar,Test=Bar,A=C,Code=Fun}它应该按照“=”号右边的内容进行升序排序。你为什么还要创建它呢?这是可行的,但确实如此。你希望排序的结果是什么?对于{A=C,Test=Bar,Code=Fun,Foo=Bar}的输入,完成的排序应该是这样的。{Foo=Bar,Test=Bar,A=C,Code=Fun}它应该按照“=”号右边的内容进行升序排序。你为什么还要创建它呢?这是可行的,但确实如此。