Javascript/JQuery-按数组的分割部分排序?

Javascript/JQuery-按数组的分割部分排序?,javascript,jquery,Javascript,Jquery,我想按数组的分割部分对数组进行排序 example_array = ["Zebra:Add","Pay:Cold","And:Vets","Jam:Back"] 我想这样分类: console.log(code here) // prints ["Zebra:Add","Jam:Back","Pay:Cold","And:Vets"] 注:我想“斑马:添加”,“支付:冷”等留在一起。我只想按照你对这个问题的评论中“:”后面的文本进行排序: 我甚至想不出解决办法 把问题分解成小块。您希望按数组

我想按数组的分割部分对数组进行排序

example_array = ["Zebra:Add","Pay:Cold","And:Vets","Jam:Back"]
我想这样分类:

console.log(code here) // prints ["Zebra:Add","Jam:Back","Pay:Cold","And:Vets"]

注:我想“斑马:添加”,“支付:冷”等留在一起。我只想按照你对这个问题的评论中“:”后面的文本进行排序:

我甚至想不出解决办法

把问题分解成小块。您希望按数组中字符串的一部分对数组进行排序,因此需要找出/查看

  • 如何对数组排序(您已经完成了排序,找到了
    sort
    方法)
  • 如何隔离要排序的字符串部分
  • 如何正确比较
    Array#sort
  • 如何在做1的背景下做2和3
  • Re#2,有多种方法可以做到这一点。您可以通过
    字符串#indexOf
    找到
    ,然后使用
    子字符串
    获取它后面的所有字符。您可以
    拆分
    上的字符串,然后使用后半部分(如果您知道字符串中不会有多个
    )。或者可以使用正则表达式来隔离第一个
    之后的所有内容

    例如,
    someString.match(/:.*$/)[0]
    隔离以第一个
    开头的所有字符。(包括
    是无害的,但是如果不想包括它,可以使用
    .substring(1)
    。)

    Re#3:
    Array#sort
    期望其回调返回负数(如果第一个参数在第二个参数之前),
    0
    (如果它们的顺序无关紧要),或者返回正数(如果第二个参数在第一个参数之前)
    String#localeCompare
    根据当前区域设置比较字符串并准确返回该信息,因此我们希望使用该信息

    Re#4:
    Array#sort
    接受回调函数,因此您可以在该回调中执行所有字符串拆分和比较。但是,由于回调将被重复调用,通常第一个或第二个参数是之前已经检查过的参数,因此对于较大的数组来说,这样做可能效率低下。提前进行所有字符串拆分/隔离,然后进行排序,然后获得所需的结果,这可能更有意义

    因此:

    不是特别有效的方法(对于像小数组这样的数据集很好)是在排序回调中隔离要排序的部分:

    var array = ["Zebra:Add","Pay:Cold","And:Vets","Jam:Back"];
    array.sort(function(left, right) {
        return left.match(/:.*$/)[0].localeCompare(right.match(/:.*$/)[0]);
    });
    
    var数组=[“斑马:添加”、“支付:寒冷”、“和:兽医”、“果酱:返回”];
    array.sort(函数(左、右){
    返回left.match(/:.*$/)[0]。localeCompare(right.match(/:.*$/)[0]);
    });
    
    console.log(数组)我喜欢前面答案的简单性,相比之下,我的方法可能太罗嗦了!但这是

    1.)获取原始数组并从中构建一个新的排序数组,JSON数组中的每个对象都有一个text1和text2值。。。我们将根据文本2的值进行排序

    2.)根据text2值运行排序

    3.)清空原始数组

    4.)循环排序数组并重新填充原始数组

    这里有一个

    //正在启动数组。我们想按冒号后面的文本排序
    示例_数组=[“斑马:添加”、“支付:寒冷”、“和:兽医”、“果酱:背”];
    //用于构建JSON数组的空数组,根据所需文本字符串进行排序
    排序_数组=[];
    //循环遍历原始数组并将新对象推送到排序数组
    //每个对象都包含一个TEXT1值和一个TEXT2值
    $.each(示例_数组、函数(i、val){
    排序数组.push({“text1”:val.split(':')[0],“text2”:val.split(':')[1]})
    })
    //按TEXT2值对排序数组进行排序
    排序\数组.排序(函数(a,b){
    如果(a.text2'+val+'');
    })
    
    将匿名比较函数放入方法参数中。@guradio,还没有。我甚至想不出一个解决方案。当然,如果你想不出一个解决方案,或者一个开始的地方,也许你需要上课或使用教程。谢谢这与我使用160多个不同字符串的数组完美配合!
    // STARTING ARRAY.  WE WANT TO SORT BY THE TEXT AFTER THE COLON
    example_array = ["Zebra:Add", "Pay:Cold", "And:Vets", "Jam:Back"];
    
    // AN EMPTY ARRAY TO BUILD A JSON ARRAY FROM, THE SORT FROM THE DESIRED TEXT STRING
    sorting_array = [];
    
    
    // LOOP THROUGH THE ORIGINAL ARRAY AND PUSH A NEW OBJECT TO THE SORTING ARRAY
    // EACH OBJECT CONTAINS A TEXT1 VALUE AND A TEXT2 VALUE
    $.each(example_array, function(i, val){
       sorting_array.push({"text1": val.split(':')[0], "text2": val.split(':')[1]})
    })
    
    // SORT THE SORTING ARRAY BY THE TEXT2 VALUE
    sorting_array.sort(function(a, b){
        if (a.text2 < b.text2) return -1;
        if (b.text2 < a.text2) return 1;
        return 0;
    });
    
    // EMPTY OUR ORIGINAL ARRAY
    example_array = [];
    
    // FOR DEMO PURPOSES LETS DISPLAY EACH IN THE DOM IN A UL , 
    // AND ALSO RE-POPULATE THE ORIGINAL ARRAY WITHT HE NEW ORDER
    $.each(sorting_array, function(i, val){
       example_array.push(val.text1+':'+val.text2)
    })
    
    // TO SHOW THE NEW ORDER, LETS LOOP BACK OVER THE EXAMPLE_ARRAY
    $.each(example_array, function(i, val){
        $('ul').append('<li>' + val+ '</li>');
    })