Search code examples
javascriptarrayssortingsplitarray-map

Sorting an Array of comma separated string using JavaScript


I came across with a weird requirement and I am struggling for last few hours to complete it. Below is my Array of string(just an example, the actual array contains around 2500 records):

var testArray = [
  "130,839.9,855,837.3,848.65,3980489", 
  "129,875,875,828.1,833.25,6926078", 
  "138,891.3,893.3,865.2,868.75,5035618"
]

We have 3 element here of which each element is comma separated(each element have 6 item). i.e:

testArray[0] = "130,839.9,855,837.3,848.65,3980489"

My problem is, I wanted to sort testArray based on the first item of each element and convert it to array of array having all value into float, so the output would be:

[
  [129, 875, 875, 828.1, 833.25, 6926078],
  [130, 839.9, 855, 837.3, 848.65, 3980489],
  [138, 891.3, 893.3, 865.2, 868.75, 5035618]
]

I am able to sort individual item but not the entire array as a whole, and I have tried using split and then sort with no luck.

Can someone help me out with this and please let me know if I am not clear.


Solution

  • Convert the array using Array#map within an Array#map, then use Array#sort on the converted array according to the [0] indices (a[0] - b[0]):

    In ES5

    var testArray = [
      "130,839.9,855,837.3,848.65,3980489", 
      "129,875,875,828.1,833.25,6926078", 
      "138,891.3,893.3,865.2,868.75,5035618"
    ]
    
    var converted = testArray.map(function (item) {
      return item.split(',').map(function (num) {
        return parseFloat(num);
      });
    })
    console.log(converted)
    
    var sorted = converted.sort(function (a, b) { return a[0] - b[0] })
    console.log(sorted)

    In ES6

    const testArray = [
      "130,839.9,855,837.3,848.65,3980489", 
      "129,875,875,828.1,833.25,6926078", 
      "138,891.3,893.3,865.2,868.75,5035618"
    ]
    
    const converted = testArray.map(
      item => item.split(',').map(
        num => parseFloat(num)
      )
    )
    console.log(converted)
    
    const sorted = converted.sort((a, b) => a[0] - b[0])
    console.log(sorted)

    In ES6 (condensed)

    const testArray = [
      "130,839.9,855,837.3,848.65,3980489", 
      "129,875,875,828.1,833.25,6926078", 
      "138,891.3,893.3,865.2,868.75,5035618"
    ]
    
    const convertedAndSorted = testArray
      .map(n => n.split(',')
      .map(num => parseFloat(num)))
      .sort((a, b) => a[0] - b[0])
    
    console.log(convertedAndSorted)