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' },
];
答案 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]);