Data Sorting in an array keeping first and last element position fixed in angular2

时间:2017-10-30 16:06:28

标签: javascript angular

Sort ascending and decending order in the desired format? Given below is the shdata and desired output?

 //data is in the given below format
       shdata = [
            { 'Name': 'A', 'Data': '57.6' },
             { 'Name': 'B', 'Data': '-10.6' },
            { 'Name': 'C', 'Data': '-50.6' },
            { 'Name': 'D', 'Data': '50.6' },
            { 'Name': 'E', 'Data': '10.6' },
            { 'Name': 'F', 'Data': '0.6' },
            { 'Name': 'G', 'Data': '-5.6' },
          ];

I want to convert it in sort ascending order and descending order like(Desired output).

Note: shdata[0] and shdata[last] should retain their position as it is, the sorting should be in between them.

     shdata = [
            { 'Name': 'A', 'Data': '57.6' },
             { 'Name': 'C', 'Data': '-50.6' },
            { 'Name': 'B', 'Data': '-10.6' },
            { 'Name': 'F', 'Data': '0.6' },
            { 'Name': 'E', 'Data': '10.6' },
            { 'Name': 'D', 'Data': '50.6' },   
            { 'Name': 'G', 'Data': '-5.6' },
          ];

2 个答案:

答案 0 :(得分:4)

这是解决此问题的简单方法。

    shdata = [
        { 'Name': 'A', 'Data': '57.6' },
        { 'Name': 'B', 'Data': '-10.6' },
        { 'Name': 'C', 'Data': '-50.6' },
        { 'Name': 'D', 'Data': '50.6' },
        { 'Name': 'E', 'Data': '10.6' },
        { 'Name': 'F', 'Data': '0.6' },
        { 'Name': 'G', 'Data': '-5.6' },
        ];

    var first = shdata.shift();
    var last = shdata.pop();

    shdata.sort( function (a,b) {
      if( parseFloat(a.Data) > parseFloat(b.Data)){
        return 1;
      }else {
        return 0;
      }
    });

    shdata.splice(0,0,first);
    shdata.push(last);

答案 1 :(得分:2)

似乎最简单的想法就是将slice数组放入要排序的子集中(第二个到倒数第二个索引将是1到length - 1),sort子集,然后重新创建数组。

由于您正在尝试对对象进行排序,因此您必须定义自定义排序功能。此外,由于您的Data属性似乎是number但是存储为字符串,因此您必须在sort函数中进行转换。或者,存储数字而不是字符串。获得子集后,您可以像这样调用子集sort

// sort ascending
subset.sort(function(a, b) {
    return parseFloat(a.Data) - parseFloat(b.Data);
});

在那之后,把你的作品放在一起很简单。

var result = [shdata[0]];
result = result.concat(subset);
result.push(shdata[shdata.length - 1]);