0

I'm trying to sorted my array. I'm trying to sort the blocks by the [2] entry in each of the square brackets. So the 15th should be at the top and the 8th should be second and so on.

I've tried using.

var sorted = data.sort(function(a,b){return b[2]-a[2]});
console.log(sorted);

and

data.sort(function(a,b){return b[2]-a[2]});
console.log(sorted);

but this didn't work. Is it because the numbers are stored as text? if so i've tried par

data.sort(function(a,b){return parseFloat(b[2])-parseFloat(a[2])});
console.log(sorted);

and this didn't work either.

0:(2) ["HDR", "GENERATION BY FUEL TYPE CURRENT Last Updated At 20180719150500"]
1:(2) ["FTR", "14"]
2:(8) ["FUELINSTHHCUR", "OCGT", "0", "0.0", "0", "0.0", "0", "0.0"]
3:(8) ["FUELINSTHHCUR", "OIL", "0", "0.0", "0", "0.0", "0", "0.0"]
4:(8) ["FUELINSTHHCUR", "COAL", "947", "3.0", "900", "2.9", "15144", "2.2"]
5:(8) ["FUELINSTHHCUR", "NUCLEAR", "6407", "20.4", "6477", "20.8", "158268", "22.5"]
6:(8) ["FUELINSTHHCUR", "WIND", "1710", "5.4", "1678", "5.4", "11903", "1.7"]
7:(8) ["FUELINSTHHCUR", "PS", "165", "0.5", "174", "0.6", "6854", "1.0"]
8:(8) ["FUELINSTHHCUR", "CCGT", "17355", "55.2", "17144", "55.1", "382043", "54.3"]
9:(8) ["FUELINSTHHCUR", "OTHER", "59", "0.2", "59", "0.2", "1406", "0.2"]
10:(8) ["FUELINSTHHCUR", "INTFR", "1998", "6.4", "1998", "6.4", "47363", "6.7"]
11:(8) ["FUELINSTHHCUR", "INTIRL", "0", "0.0", "0", "0.0", "1960", "0.3"]
12:(8) ["FUELINSTHHCUR", "INTNED", "1001", "3.2", "1000", "3.2", "23097", "3.3"]
13:(8) ["FUELINSTHHCUR", "INTEW", "0", "0.0", "0", "0.0", "4803", "0.7"]
14:(8) ["FUELINSTHHCUR", "BIOMASS", "1649", "5.2", "1621", "5.2", "48031", "6.8"]
15:(7) ["TOTAL", "31448", "100.0", "31128", "100.0", "703547", "100.0"]
16:(8) ["FUELINSTHHCUR", "NPSHYD", "157", "0.5", "77", "0.2", "2675", "0.4"]

any help would be appreciated.

adam Wadsworth
  • 774
  • 1
  • 8
  • 26

2 Answers2

1

This would do your trick

var collator = new Intl.Collator(undefined, {
  numeric: true,
  sensitivity: 'base'
});
var myArray = ['1_Document', '11_Document', '2_Document'];
console.log(myArray.sort(collator.compare));

Reference: This answer

Get Off My Lawn
  • 34,175
  • 38
  • 176
  • 338
Shujat Munawar
  • 1,657
  • 19
  • 23
  • This kind of works but it's sorting on the [1] entry of each array. I need to sort from the [2] of each array from largest to smallest? – adam Wadsworth Jul 19 '18 at 15:41
1

You could take a huge value Infinity for sorting non given items to top.

Array#sort expects a numerical value of smaller than zero, zero or greater than zero for the wanted order. To get this result, you could take for simple numbers the delta of it.

b - a // sorts descending

For a not used index of the array, you could check it with in operator and take a value which shifts or keeps the item at the actual place on top by using a greater value then usually taken as number in the array, which is Infinity.

var data = [["HDR", "GENERATION BY FUEL TYPE CURRENT Last Updated At 20180719150500"], ["FTR", "14"], ["FUELINSTHHCUR", "OCGT", "0", "0.0", "0", "0.0", "0", "0.0"], ["FUELINSTHHCUR", "OIL", "0", "0.0", "0", "0.0", "0", "0.0"], ["FUELINSTHHCUR", "COAL", "947", "3.0", "900", "2.9", "15144", "2.2"], ["FUELINSTHHCUR", "NUCLEAR", "6407", "20.4", "6477", "20.8", "158268", "22.5"], ["FUELINSTHHCUR", "WIND", "1710", "5.4", "1678", "5.4", "11903", "1.7"], ["FUELINSTHHCUR", "PS", "165", "0.5", "174", "0.6", "6854", "1.0"], ["FUELINSTHHCUR", "CCGT", "17355", "55.2", "17144", "55.1", "382043", "54.3"], ["FUELINSTHHCUR", "OTHER", "59", "0.2", "59", "0.2", "1406", "0.2"], ["FUELINSTHHCUR", "INTFR", "1998", "6.4", "1998", "6.4", "47363", "6.7"], ["FUELINSTHHCUR", "INTIRL", "0", "0.0", "0", "0.0", "1960", "0.3"], ["FUELINSTHHCUR", "INTNED", "1001", "3.2", "1000", "3.2", "23097", "3.3"], ["FUELINSTHHCUR", "INTEW", "0", "0.0", "0", "0.0", "4803", "0.7"], ["FUELINSTHHCUR", "BIOMASS", "1649", "5.2", "1621", "5.2", "48031", "6.8"], ["TOTAL", "31448", "100.0", "31128", "100.0", "703547", "100.0"], ["FUELINSTHHCUR", "NPSHYD", "157", "0.5", "77", "0.2", "2675", "0.4"]];

data.sort((a, b) => (2 in b ? b[2] : Infinity) - (2 in a ? a[2] : Infinity));

console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Nina Scholz
  • 376,160
  • 25
  • 347
  • 392