Sort array by month and year2019 Community Moderator ElectionCreate ArrayList from arrayHow do I check if an array includes an object in JavaScript?How to append something to an array?How do I sort a dictionary by value?Sorting an array of JavaScript objectsSort array of objects by string property valueLoop through an array in JavaScriptHow to check if an object is an array?How do I remove a particular element from an array in JavaScript?For-each over an array in JavaScript?

Is there a math expression equivalent to the conditional ternary operator?

Is it a Cyclops number? "Nobody" knows!

Why isn't P and P/poly trivially the same?

What is the oldest European royal house?

Too soon for a plot twist?

Boss Telling direct supervisor I snitched

Short SF story. Females use stingers to implant eggs in yearfathers

Sort array by month and year

Vector-transposing function

Is the differential, dp, exact or not?

Can I challenge the interviewer to give me a proper technical feedback?

Exempt portion of equation line from aligning?

Interpretation of linear regression interaction term plot

Is "cogitate" used appropriately in "I cogitate that success relies on hard work"?

An Undercover Army

Does the US political system, in principle, allow for a no-party system?

Use Mercury as quenching liquid for swords?

How to make sure I'm assertive enough in contact with subordinates?

Why aren't there more Gauls like Obelix?

Mixed Feelings - What am I

What would be the most expensive material to an intergalactic society?

Can I negotiate a patent idea for a raise, under French law?

Create chunks from an array

Limpar string com Regex



Sort array by month and year



2019 Community Moderator ElectionCreate ArrayList from arrayHow do I check if an array includes an object in JavaScript?How to append something to an array?How do I sort a dictionary by value?Sorting an array of JavaScript objectsSort array of objects by string property valueLoop through an array in JavaScriptHow to check if an object is an array?How do I remove a particular element from an array in JavaScript?For-each over an array in JavaScript?










6















I need help with sorting an array by month and year to display on chart respectively.



Array1: ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'....];
Desired Output : [....'Apr18','May18','Jun18','Jul18','Jan19','Mar19'];


I also have another array with values for each month according to the array above respectively



Array2: ['Mar19_value','Apr18_value','Jun18_value','Jul18_value','May18_value'
,'Jan19_value'....];

Array2: ['55','2','3','0','21','132'....]; //real values


Now when the monthyear array sorts i want the data in this array to move to a new position according to the monthyear position. like this:



Desired Array1: [....'Apr18','May18','Jun18','Jul18','Jan19','Mar19'];
Desired Array2: [....'Apr18_value','May18_value','Jun18_value','Jul18_value','Jan19_value','Mar19_value'];


So i can pick the data later like this:



var label = array[4];
var value = array2[4];


Any help will be appreciated.










share|improve this question



















  • 9





    What have you tried so far?

    – Anurag Srivastava
    17 hours ago















6















I need help with sorting an array by month and year to display on chart respectively.



Array1: ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'....];
Desired Output : [....'Apr18','May18','Jun18','Jul18','Jan19','Mar19'];


I also have another array with values for each month according to the array above respectively



Array2: ['Mar19_value','Apr18_value','Jun18_value','Jul18_value','May18_value'
,'Jan19_value'....];

Array2: ['55','2','3','0','21','132'....]; //real values


Now when the monthyear array sorts i want the data in this array to move to a new position according to the monthyear position. like this:



Desired Array1: [....'Apr18','May18','Jun18','Jul18','Jan19','Mar19'];
Desired Array2: [....'Apr18_value','May18_value','Jun18_value','Jul18_value','Jan19_value','Mar19_value'];


So i can pick the data later like this:



var label = array[4];
var value = array2[4];


Any help will be appreciated.










share|improve this question



















  • 9





    What have you tried so far?

    – Anurag Srivastava
    17 hours ago













6












6








6


3






I need help with sorting an array by month and year to display on chart respectively.



Array1: ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'....];
Desired Output : [....'Apr18','May18','Jun18','Jul18','Jan19','Mar19'];


I also have another array with values for each month according to the array above respectively



Array2: ['Mar19_value','Apr18_value','Jun18_value','Jul18_value','May18_value'
,'Jan19_value'....];

Array2: ['55','2','3','0','21','132'....]; //real values


Now when the monthyear array sorts i want the data in this array to move to a new position according to the monthyear position. like this:



Desired Array1: [....'Apr18','May18','Jun18','Jul18','Jan19','Mar19'];
Desired Array2: [....'Apr18_value','May18_value','Jun18_value','Jul18_value','Jan19_value','Mar19_value'];


So i can pick the data later like this:



var label = array[4];
var value = array2[4];


Any help will be appreciated.










share|improve this question
















I need help with sorting an array by month and year to display on chart respectively.



Array1: ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'....];
Desired Output : [....'Apr18','May18','Jun18','Jul18','Jan19','Mar19'];


I also have another array with values for each month according to the array above respectively



Array2: ['Mar19_value','Apr18_value','Jun18_value','Jul18_value','May18_value'
,'Jan19_value'....];

Array2: ['55','2','3','0','21','132'....]; //real values


Now when the monthyear array sorts i want the data in this array to move to a new position according to the monthyear position. like this:



Desired Array1: [....'Apr18','May18','Jun18','Jul18','Jan19','Mar19'];
Desired Array2: [....'Apr18_value','May18_value','Jun18_value','Jul18_value','Jan19_value','Mar19_value'];


So i can pick the data later like this:



var label = array[4];
var value = array2[4];


Any help will be appreciated.







javascript html arrays sorting






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 5 hours ago









isanae

2,51711437




2,51711437










asked 18 hours ago









Amir QureshiAmir Qureshi

222112




222112







  • 9





    What have you tried so far?

    – Anurag Srivastava
    17 hours ago












  • 9





    What have you tried so far?

    – Anurag Srivastava
    17 hours ago







9




9





What have you tried so far?

– Anurag Srivastava
17 hours ago





What have you tried so far?

– Anurag Srivastava
17 hours ago












9 Answers
9






active

oldest

votes


















5














You could get the date as sortable string and sort this sting.



For getting more than one array sorted by one signature array, you could take sorting with map, where you sort an array of indices, indicating the final sorting and then reassign all arrays with this sorting.



The getD function returns a formatted string by taking an index of array0 for sorting. Inside of the fuinction the string is destructed into month and year parts and replaced by its ISO 8601 representation. The callback of the replacement function takes the matched items, retuns an array with a formatted year and the month of an object with the month names and the related month numbers. Then this array is joined and returned.



The sorting takes place with a comparsion with String#localeCompare.






var array1 = ['Mar19', 'Apr18', 'Jun18', 'Jul18', 'May18', 'Jan19'],
array2 = ['Mar19_value', 'Apr18_value', 'Jun18_value', 'Jul18_value', 'May18_value', 'Jan19_value'],
array3 = ['55', '2', '3', '0', '21', '132'],
indices = Object
.keys(array1)
.sort(function (a, b)
function getD(i)
var months = Jan: '01', Feb: '02', Mar: '03', Apr: '04', May: '05', Jun: '06', Jul: '07', Aug: '08', Sep: '09', Oct: '10', Nov: '11', Dec: '12' ,
s = array1[i];
return s.replace(/^(...)(.+)$/, (_, m, y) => [y.padStart(4, '0'), months[m]].join('-'));

return getD(a).localeCompare(getD(b));
),
result = [array1, array3].map(a => indices.map(i => a[i]));

result.forEach(a => console.log(...a));








share|improve this answer

























  • Are you sure the sorting is correct format? i think you are sorted MMDD Format its a MMYY

    – prasanth
    16 hours ago












  • @prasanth, thank you for the hint. i thought, the number is a day.

    – Nina Scholz
    16 hours ago











  • if i only want to perform this with array 1 and array 3?

    – Amir Qureshi
    16 hours ago












  • @AmirQureshi, then you need oly the wanted array in the array for getting a new sort. please see edit.

    – Nina Scholz
    16 hours ago












  • do you want to get new arrays?

    – Nina Scholz
    16 hours ago


















9














You need change the string for to new Date(dateString) format like



new Date(Month Date Year)


Updated regex Pattern for Both Array



https://regex101.com/r/h1cm1z/2/



Updated Sort Second array based on first array sorting index






var arr1 = ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'];
var arr2 =['55','2','3','0','21','132'];

function datesort(arr)
return arr.concat().sort((a,b)=>
a = a.replace(/(d+)(.*)/g,' 1 $1'); // Month 1 YEAR
b = b.replace(/(d+)(.*)/g,' 1 $1'); // Month 1 YEAR
return new Date(a) - new Date(b)
)


var after_arr1 =new datesort(arr1);
var after_arr2 = arr1.reduce(function(a,b,c)
var ind = after_arr1.indexOf(b);
a[ind] = arr2[c]
return a
,[]);


console.log(after_arr1.join(','));
console.log(after_arr2.join(','))








share|improve this answer

























  • Thank you , it works as required. What if i have another array with values for each month respectively according to the monthyear array. how do i sort it when the monthyear moves to a new position. do you understand what i am saying?

    – Amir Qureshi
    17 hours ago











  • i could added the format of date .you could change your array value like this.If you have any new position .Kindly change regex pattern and reproduce the same date format.Or post your new position. i will give the matching pattern

    – prasanth
    17 hours ago











  • Or where did you get this array? You could format array with in pattern on the place of array create.or with something added delimiters like MM_YY,YY-MM

    – prasanth
    17 hours ago












  • i have updated the question please have a look .

    – Amir Qureshi
    17 hours ago






  • 1





    you need to sort array2 based on array1 sorted index position right?

    – prasanth
    17 hours ago


















8














To order properly you need to know the order of the months. This is not alphabetical so you can use an array with the order of the months then look them up.



const monthOrder = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']



Is already properly sorted and can be used in conjunction with .indexOf() to get the position of a month.






const myArr = ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'];
const myArr2 = ['Mar19_value','Apr18_value','Jun18_value','Jul18_value','May18_value'
,'Jan19_value'];

const monthOrder = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

let sortYearMonth = (a, b) =>
let monthA = monthOrder.indexOf(a.slice(0,3))
let yearA = a.slice(3,6)
let monthB = monthOrder.indexOf(b.slice(0,3))
let yearB = b.slice(3,6)
return (`$yearA-$monthA` < `$yearB-$monthB`) ? -1 : (`$yearA-$monthA` > `$yearB-$monthB`) ? 1 : 0


let sortedMonths = myArr.sort(sortYearMonth)
let sortedMonths2 = myArr2.sort(sortYearMonth)

console.log(sortedMonths )
console.log(sortedMonths2 )





Update: values in same position



Updated version links the two arrays together then sorts the first while keeping the relative position to the second.



Idea: Link two arrays with a temporary Object then extract the key/value pair using Object.entries. Then sorting the array based on the first value of the pair, which is the value of array1. Then it returns the key/value pair in the right order you can extract the values into two arrays again by using .map()



I added a run with the string based example and the real values examples below




const myArr = ['Mar19', 'Apr18', 'Jun18', 'Jul18', 'May18', 'Jan19'];
const myArr2 = ['Mar19_value', 'Apr18_value', 'Jun18_value', 'Jul18_value', 'May18_value', 'Jan19_value'];

const myArr3 = ['55','2','3','0','21','132'];

const monthOrder = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

let sortYearMonth = (a, b) =>
let monthA = monthOrder.indexOf(a.slice(0, 3))
let yearA = a.slice(3, 6)
let monthB = monthOrder.indexOf(b.slice(0, 3))
let yearB = b.slice(3, 6)
return (`$yearA-$monthA` < `$yearB-$monthB`) ? -1 : (`$yearA-$monthA` > `$yearB-$monthB`) ? 1 : 0


function sortByFirst(myArr, myArr2)
let keyValue = myArr.reduce((links, item, i) =>
links[item] = myArr2[i];
return links
, )
let entries = Object.entries(keyValue)
return entries.sort((a, b) => sortYearMonth(a[0], b[0]))


let sortedEntries = sortByFirst(myArr, myArr2)
let sortedMonths = sortedEntries.map(i => i[0])
let sortedValues = sortedEntries.map(i => i[1])

let sortedEntries2 = sortByFirst(myArr, myArr3)
let sortedMonths2 = sortedEntries2.map(i => i[0])
let sortedValues2 = sortedEntries2.map(i => i[1])

console.log(sortedMonths)
console.log(sortedValues)

console.log(sortedMonths2)
console.log(sortedValues2)








share|improve this answer

























  • i have done some changes in the question please can you have a look at it. sortYearMonth can not sort the values array because it does include month and year it justs integers. basically i want to get the new index of array1 items and then move array2 items to their new positions according to month names of array1

    – Amir Qureshi
    17 hours ago






  • 1





    Yes, I just got that :P, Let me update my answer, I will give you two options

    – Jordan Maduro
    17 hours ago











  • @AmirQureshi I updated to reflect your real updated question. Now you can sort two arrays where array 2 inherits array 1's new position

    – Jordan Maduro
    17 hours ago











  • let me check it please..

    – Amir Qureshi
    16 hours ago











  • @AmirQureshi See updated under my original answer

    – Jordan Maduro
    16 hours ago



















8

















const input = ['Mar19', 'Apr18', 'Jun18', 'Jul18', 'May18', 'Jan19'];

//const output : ['Apr18','May18','Jun18','Jul18','Jan19','Mar19'];
//Can be done easily by using momentjs, darte-fns, but here i will do it natively

const t =
Jan: 1,
Feb: 2,
Mar: 3,
Apr: 4,
May: 5,
Jun: 6,
Jul: 7,
Aug: 8,
Sep: 9,
Oct: 10,
Nov: 11,
Dec: 12

const giveConcatString = (a, t) =>
const monthPart = a.substr(0, 3)
const yearPart = a.substr(3)
return `$yearPart$t[monthPart]`

const sortedArray = input.sort((a, b) =>
const concatString = giveConcatString(a, t)
const concatStringB = giveConcatString(b, t)
return concatString <= concatStringB ? -1 : 1

)
console.log(sortedArray)





This may help you solve this problem. Did it natively.






share|improve this answer

























  • Doesnt work correctly, check your result out

    – Jordan Maduro
    17 hours ago











  • yes let me edit

    – simbathesailor
    17 hours ago











  • check now Thanks

    – simbathesailor
    17 hours ago


















3














You can try this raw snippet.






var MY = ['Mar19', 'Apr18', 'Jun18', 'Jul18', 'May18', 'Jan19'];
var s = "JanFebMarAprMayJunJulAugSepOctNovDec";
// converting to raw date format
for (i in MY)
num = MY[i].match(/d+/g);
letr = MY[i].match(/[a-zA-Z]+/g);
MY[i] = (s.indexOf(letr) / 3 + 1) + '-' + '20' + num;

// sorting logic
var sorted = MY.sort(function(a, b)
a = a.split("-");
b = b.split("-")
return new Date(a[1], a[0], 1) - new Date(b[1], b[0], 1)
);
// converting back to original array after sorting
res = [];
for (i in sorted)
var a = sorted[i].split('-');
res[i] = (s.substr((parseInt(a[0]) - 1) * 3, 3)) + '-' + a[1].substr(2, 2);


console.log(res);








share|improve this answer






























    2














    I used lodash for sorting and substring method to divide date into month and day parts






    const data = ['Mar20','Mar21', 'Mar01', 'Mar19','Apr18','Jun18','Jul18','May18','Jan19']

    const monthMap = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];

    const sorted = _.sortBy(data, date => monthMap.indexOf(date.substring(0,3)), date => date.substring(3,5))

    console.log(sorted)

    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>








    share|improve this answer






























      2














      let mth = ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'];

      mth.sort((itemA, itemB)=>
      let mthAstr = itemA.slice(0,3)+" 01 "+itemA.slice(3,5);
      let mthA = new Date(mthAstr);
      let mthBstr = itemB.slice(0,3)+" 01 "+itemB.slice(3,5);
      let mthB = new Date(mthBstr);
      if (mthA < mthB)
      return -1;
      if (mthA > mthB)
      return 1;
      return 0;
      );





      share|improve this answer






























        2














        You can try something like that :



        var Array = ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'];
        Array.sort(function(a, b)
        a = [a.slice(0,3), ' 20', a.slice(3)].join('');
        b = [b.slice(0,3), ' 20', b.slice(3)].join('')
        return new Date() - new Date(b);
        );

        console.log(Array);





        share|improve this answer










        New contributor




        KAMLESH NEHRA is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
        Check out our Code of Conduct.



























          0














          I would suggest that your data structure is unfortunate. Working with shared indices makes it much more difficult than a data structure that combines them, such as an array of objects, [label: 'Mar19', value: 55, ...].



          If your data is coming from an upstream solution you cannot control, you can still manage this in your own work, converting before you use it. (And if you really have to converting back to pass to others.)



          A common name for a function combining two arrays is zip -- think of it acting like a zipper. This version uses one that takes a function to say how the paired elements should be combined. (Elsewhere such a function might be called zipWith.)



          Here sortArraysByDate calls zip passing a function that turns 'Mar19' and 55 into label: 'Mar19, value: 55, month: 'Mar', year: 19 using dateFields to extract the month and year from that label, then sorts these using the straightforward dateSort






          const months = Jan: 1, Feb: 2, Mar: 3, Apr: 4, May: 5, Jun: 6,
          Jul: 7, Aug: 8, Sep: 9, Oct: 10, Nov: 11, Dec: 12

          const dateFields = (d) => (
          month: d.slice(0, 3),
          year: Number(d.slice(3))
          )

          const dateSort = (month: m1, year: y1, month: m2, year: y2) =>
          (y1 - y2) || (months[m1] - months[m2])

          const zip = (fn, a1, a2) => a1.map((a, i) => fn(a, a2[i]))

          const sortArraysByDate = (a1, a2) =>
          zip((label, value) => (label, value, ...dateFields(label)), a1, a2)
          .sort(dateSort)
          .map((label, value) => (label, value))


          const Array1 = ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'];
          const Array2 = ['55','2','3','0','21','132']; //real values

          const result = sortArraysByDate(Array1, Array2)

          console.log(result)





          The map call in sortArraysByDate is quite possibly not necessary. Without it, the resulting data includes extra year and month fields; that might not be an issue.



          If you really need those updated arrays in the original format, you can just map the result:



          const newArray1 = result.map(o => o.label)
          const newArray2 = result.map(o => o.value)


          But I would urge you not to do this unless it's absolutely necessary. This structure is really useful. The paired arrays are much less so.



          Also, if you need to combine more than two arrays, you could write a slightly more sophisticated version of zip:



          const zip = (fn, ...as) => as[0].map((_, i) => fn(...as.map(a => a[i])))


          This takes a function on n arguments, and n arrays, and yields a new array containing the result of calling that function respectively on the successive items in each of the arrays.






          share|improve this answer
























            Your Answer






            StackExchange.ifUsing("editor", function ()
            StackExchange.using("externalEditor", function ()
            StackExchange.using("snippets", function ()
            StackExchange.snippets.init();
            );
            );
            , "code-snippets");

            StackExchange.ready(function()
            var channelOptions =
            tags: "".split(" "),
            id: "1"
            ;
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function()
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled)
            StackExchange.using("snippets", function()
            createEditor();
            );

            else
            createEditor();

            );

            function createEditor()
            StackExchange.prepareEditor(
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader:
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            ,
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            );



            );













            draft saved

            draft discarded


















            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55061324%2fsort-array-by-month-and-year%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            9 Answers
            9






            active

            oldest

            votes








            9 Answers
            9






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            5














            You could get the date as sortable string and sort this sting.



            For getting more than one array sorted by one signature array, you could take sorting with map, where you sort an array of indices, indicating the final sorting and then reassign all arrays with this sorting.



            The getD function returns a formatted string by taking an index of array0 for sorting. Inside of the fuinction the string is destructed into month and year parts and replaced by its ISO 8601 representation. The callback of the replacement function takes the matched items, retuns an array with a formatted year and the month of an object with the month names and the related month numbers. Then this array is joined and returned.



            The sorting takes place with a comparsion with String#localeCompare.






            var array1 = ['Mar19', 'Apr18', 'Jun18', 'Jul18', 'May18', 'Jan19'],
            array2 = ['Mar19_value', 'Apr18_value', 'Jun18_value', 'Jul18_value', 'May18_value', 'Jan19_value'],
            array3 = ['55', '2', '3', '0', '21', '132'],
            indices = Object
            .keys(array1)
            .sort(function (a, b)
            function getD(i)
            var months = Jan: '01', Feb: '02', Mar: '03', Apr: '04', May: '05', Jun: '06', Jul: '07', Aug: '08', Sep: '09', Oct: '10', Nov: '11', Dec: '12' ,
            s = array1[i];
            return s.replace(/^(...)(.+)$/, (_, m, y) => [y.padStart(4, '0'), months[m]].join('-'));

            return getD(a).localeCompare(getD(b));
            ),
            result = [array1, array3].map(a => indices.map(i => a[i]));

            result.forEach(a => console.log(...a));








            share|improve this answer

























            • Are you sure the sorting is correct format? i think you are sorted MMDD Format its a MMYY

              – prasanth
              16 hours ago












            • @prasanth, thank you for the hint. i thought, the number is a day.

              – Nina Scholz
              16 hours ago











            • if i only want to perform this with array 1 and array 3?

              – Amir Qureshi
              16 hours ago












            • @AmirQureshi, then you need oly the wanted array in the array for getting a new sort. please see edit.

              – Nina Scholz
              16 hours ago












            • do you want to get new arrays?

              – Nina Scholz
              16 hours ago















            5














            You could get the date as sortable string and sort this sting.



            For getting more than one array sorted by one signature array, you could take sorting with map, where you sort an array of indices, indicating the final sorting and then reassign all arrays with this sorting.



            The getD function returns a formatted string by taking an index of array0 for sorting. Inside of the fuinction the string is destructed into month and year parts and replaced by its ISO 8601 representation. The callback of the replacement function takes the matched items, retuns an array with a formatted year and the month of an object with the month names and the related month numbers. Then this array is joined and returned.



            The sorting takes place with a comparsion with String#localeCompare.






            var array1 = ['Mar19', 'Apr18', 'Jun18', 'Jul18', 'May18', 'Jan19'],
            array2 = ['Mar19_value', 'Apr18_value', 'Jun18_value', 'Jul18_value', 'May18_value', 'Jan19_value'],
            array3 = ['55', '2', '3', '0', '21', '132'],
            indices = Object
            .keys(array1)
            .sort(function (a, b)
            function getD(i)
            var months = Jan: '01', Feb: '02', Mar: '03', Apr: '04', May: '05', Jun: '06', Jul: '07', Aug: '08', Sep: '09', Oct: '10', Nov: '11', Dec: '12' ,
            s = array1[i];
            return s.replace(/^(...)(.+)$/, (_, m, y) => [y.padStart(4, '0'), months[m]].join('-'));

            return getD(a).localeCompare(getD(b));
            ),
            result = [array1, array3].map(a => indices.map(i => a[i]));

            result.forEach(a => console.log(...a));








            share|improve this answer

























            • Are you sure the sorting is correct format? i think you are sorted MMDD Format its a MMYY

              – prasanth
              16 hours ago












            • @prasanth, thank you for the hint. i thought, the number is a day.

              – Nina Scholz
              16 hours ago











            • if i only want to perform this with array 1 and array 3?

              – Amir Qureshi
              16 hours ago












            • @AmirQureshi, then you need oly the wanted array in the array for getting a new sort. please see edit.

              – Nina Scholz
              16 hours ago












            • do you want to get new arrays?

              – Nina Scholz
              16 hours ago













            5












            5








            5







            You could get the date as sortable string and sort this sting.



            For getting more than one array sorted by one signature array, you could take sorting with map, where you sort an array of indices, indicating the final sorting and then reassign all arrays with this sorting.



            The getD function returns a formatted string by taking an index of array0 for sorting. Inside of the fuinction the string is destructed into month and year parts and replaced by its ISO 8601 representation. The callback of the replacement function takes the matched items, retuns an array with a formatted year and the month of an object with the month names and the related month numbers. Then this array is joined and returned.



            The sorting takes place with a comparsion with String#localeCompare.






            var array1 = ['Mar19', 'Apr18', 'Jun18', 'Jul18', 'May18', 'Jan19'],
            array2 = ['Mar19_value', 'Apr18_value', 'Jun18_value', 'Jul18_value', 'May18_value', 'Jan19_value'],
            array3 = ['55', '2', '3', '0', '21', '132'],
            indices = Object
            .keys(array1)
            .sort(function (a, b)
            function getD(i)
            var months = Jan: '01', Feb: '02', Mar: '03', Apr: '04', May: '05', Jun: '06', Jul: '07', Aug: '08', Sep: '09', Oct: '10', Nov: '11', Dec: '12' ,
            s = array1[i];
            return s.replace(/^(...)(.+)$/, (_, m, y) => [y.padStart(4, '0'), months[m]].join('-'));

            return getD(a).localeCompare(getD(b));
            ),
            result = [array1, array3].map(a => indices.map(i => a[i]));

            result.forEach(a => console.log(...a));








            share|improve this answer















            You could get the date as sortable string and sort this sting.



            For getting more than one array sorted by one signature array, you could take sorting with map, where you sort an array of indices, indicating the final sorting and then reassign all arrays with this sorting.



            The getD function returns a formatted string by taking an index of array0 for sorting. Inside of the fuinction the string is destructed into month and year parts and replaced by its ISO 8601 representation. The callback of the replacement function takes the matched items, retuns an array with a formatted year and the month of an object with the month names and the related month numbers. Then this array is joined and returned.



            The sorting takes place with a comparsion with String#localeCompare.






            var array1 = ['Mar19', 'Apr18', 'Jun18', 'Jul18', 'May18', 'Jan19'],
            array2 = ['Mar19_value', 'Apr18_value', 'Jun18_value', 'Jul18_value', 'May18_value', 'Jan19_value'],
            array3 = ['55', '2', '3', '0', '21', '132'],
            indices = Object
            .keys(array1)
            .sort(function (a, b)
            function getD(i)
            var months = Jan: '01', Feb: '02', Mar: '03', Apr: '04', May: '05', Jun: '06', Jul: '07', Aug: '08', Sep: '09', Oct: '10', Nov: '11', Dec: '12' ,
            s = array1[i];
            return s.replace(/^(...)(.+)$/, (_, m, y) => [y.padStart(4, '0'), months[m]].join('-'));

            return getD(a).localeCompare(getD(b));
            ),
            result = [array1, array3].map(a => indices.map(i => a[i]));

            result.forEach(a => console.log(...a));








            var array1 = ['Mar19', 'Apr18', 'Jun18', 'Jul18', 'May18', 'Jan19'],
            array2 = ['Mar19_value', 'Apr18_value', 'Jun18_value', 'Jul18_value', 'May18_value', 'Jan19_value'],
            array3 = ['55', '2', '3', '0', '21', '132'],
            indices = Object
            .keys(array1)
            .sort(function (a, b)
            function getD(i)
            var months = Jan: '01', Feb: '02', Mar: '03', Apr: '04', May: '05', Jun: '06', Jul: '07', Aug: '08', Sep: '09', Oct: '10', Nov: '11', Dec: '12' ,
            s = array1[i];
            return s.replace(/^(...)(.+)$/, (_, m, y) => [y.padStart(4, '0'), months[m]].join('-'));

            return getD(a).localeCompare(getD(b));
            ),
            result = [array1, array3].map(a => indices.map(i => a[i]));

            result.forEach(a => console.log(...a));





            var array1 = ['Mar19', 'Apr18', 'Jun18', 'Jul18', 'May18', 'Jan19'],
            array2 = ['Mar19_value', 'Apr18_value', 'Jun18_value', 'Jul18_value', 'May18_value', 'Jan19_value'],
            array3 = ['55', '2', '3', '0', '21', '132'],
            indices = Object
            .keys(array1)
            .sort(function (a, b)
            function getD(i)
            var months = Jan: '01', Feb: '02', Mar: '03', Apr: '04', May: '05', Jun: '06', Jul: '07', Aug: '08', Sep: '09', Oct: '10', Nov: '11', Dec: '12' ,
            s = array1[i];
            return s.replace(/^(...)(.+)$/, (_, m, y) => [y.padStart(4, '0'), months[m]].join('-'));

            return getD(a).localeCompare(getD(b));
            ),
            result = [array1, array3].map(a => indices.map(i => a[i]));

            result.forEach(a => console.log(...a));






            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited 16 hours ago

























            answered 17 hours ago









            Nina ScholzNina Scholz

            190k1599173




            190k1599173












            • Are you sure the sorting is correct format? i think you are sorted MMDD Format its a MMYY

              – prasanth
              16 hours ago












            • @prasanth, thank you for the hint. i thought, the number is a day.

              – Nina Scholz
              16 hours ago











            • if i only want to perform this with array 1 and array 3?

              – Amir Qureshi
              16 hours ago












            • @AmirQureshi, then you need oly the wanted array in the array for getting a new sort. please see edit.

              – Nina Scholz
              16 hours ago












            • do you want to get new arrays?

              – Nina Scholz
              16 hours ago

















            • Are you sure the sorting is correct format? i think you are sorted MMDD Format its a MMYY

              – prasanth
              16 hours ago












            • @prasanth, thank you for the hint. i thought, the number is a day.

              – Nina Scholz
              16 hours ago











            • if i only want to perform this with array 1 and array 3?

              – Amir Qureshi
              16 hours ago












            • @AmirQureshi, then you need oly the wanted array in the array for getting a new sort. please see edit.

              – Nina Scholz
              16 hours ago












            • do you want to get new arrays?

              – Nina Scholz
              16 hours ago
















            Are you sure the sorting is correct format? i think you are sorted MMDD Format its a MMYY

            – prasanth
            16 hours ago






            Are you sure the sorting is correct format? i think you are sorted MMDD Format its a MMYY

            – prasanth
            16 hours ago














            @prasanth, thank you for the hint. i thought, the number is a day.

            – Nina Scholz
            16 hours ago





            @prasanth, thank you for the hint. i thought, the number is a day.

            – Nina Scholz
            16 hours ago













            if i only want to perform this with array 1 and array 3?

            – Amir Qureshi
            16 hours ago






            if i only want to perform this with array 1 and array 3?

            – Amir Qureshi
            16 hours ago














            @AmirQureshi, then you need oly the wanted array in the array for getting a new sort. please see edit.

            – Nina Scholz
            16 hours ago






            @AmirQureshi, then you need oly the wanted array in the array for getting a new sort. please see edit.

            – Nina Scholz
            16 hours ago














            do you want to get new arrays?

            – Nina Scholz
            16 hours ago





            do you want to get new arrays?

            – Nina Scholz
            16 hours ago













            9














            You need change the string for to new Date(dateString) format like



            new Date(Month Date Year)


            Updated regex Pattern for Both Array



            https://regex101.com/r/h1cm1z/2/



            Updated Sort Second array based on first array sorting index






            var arr1 = ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'];
            var arr2 =['55','2','3','0','21','132'];

            function datesort(arr)
            return arr.concat().sort((a,b)=>
            a = a.replace(/(d+)(.*)/g,' 1 $1'); // Month 1 YEAR
            b = b.replace(/(d+)(.*)/g,' 1 $1'); // Month 1 YEAR
            return new Date(a) - new Date(b)
            )


            var after_arr1 =new datesort(arr1);
            var after_arr2 = arr1.reduce(function(a,b,c)
            var ind = after_arr1.indexOf(b);
            a[ind] = arr2[c]
            return a
            ,[]);


            console.log(after_arr1.join(','));
            console.log(after_arr2.join(','))








            share|improve this answer

























            • Thank you , it works as required. What if i have another array with values for each month respectively according to the monthyear array. how do i sort it when the monthyear moves to a new position. do you understand what i am saying?

              – Amir Qureshi
              17 hours ago











            • i could added the format of date .you could change your array value like this.If you have any new position .Kindly change regex pattern and reproduce the same date format.Or post your new position. i will give the matching pattern

              – prasanth
              17 hours ago











            • Or where did you get this array? You could format array with in pattern on the place of array create.or with something added delimiters like MM_YY,YY-MM

              – prasanth
              17 hours ago












            • i have updated the question please have a look .

              – Amir Qureshi
              17 hours ago






            • 1





              you need to sort array2 based on array1 sorted index position right?

              – prasanth
              17 hours ago















            9














            You need change the string for to new Date(dateString) format like



            new Date(Month Date Year)


            Updated regex Pattern for Both Array



            https://regex101.com/r/h1cm1z/2/



            Updated Sort Second array based on first array sorting index






            var arr1 = ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'];
            var arr2 =['55','2','3','0','21','132'];

            function datesort(arr)
            return arr.concat().sort((a,b)=>
            a = a.replace(/(d+)(.*)/g,' 1 $1'); // Month 1 YEAR
            b = b.replace(/(d+)(.*)/g,' 1 $1'); // Month 1 YEAR
            return new Date(a) - new Date(b)
            )


            var after_arr1 =new datesort(arr1);
            var after_arr2 = arr1.reduce(function(a,b,c)
            var ind = after_arr1.indexOf(b);
            a[ind] = arr2[c]
            return a
            ,[]);


            console.log(after_arr1.join(','));
            console.log(after_arr2.join(','))








            share|improve this answer

























            • Thank you , it works as required. What if i have another array with values for each month respectively according to the monthyear array. how do i sort it when the monthyear moves to a new position. do you understand what i am saying?

              – Amir Qureshi
              17 hours ago











            • i could added the format of date .you could change your array value like this.If you have any new position .Kindly change regex pattern and reproduce the same date format.Or post your new position. i will give the matching pattern

              – prasanth
              17 hours ago











            • Or where did you get this array? You could format array with in pattern on the place of array create.or with something added delimiters like MM_YY,YY-MM

              – prasanth
              17 hours ago












            • i have updated the question please have a look .

              – Amir Qureshi
              17 hours ago






            • 1





              you need to sort array2 based on array1 sorted index position right?

              – prasanth
              17 hours ago













            9












            9








            9







            You need change the string for to new Date(dateString) format like



            new Date(Month Date Year)


            Updated regex Pattern for Both Array



            https://regex101.com/r/h1cm1z/2/



            Updated Sort Second array based on first array sorting index






            var arr1 = ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'];
            var arr2 =['55','2','3','0','21','132'];

            function datesort(arr)
            return arr.concat().sort((a,b)=>
            a = a.replace(/(d+)(.*)/g,' 1 $1'); // Month 1 YEAR
            b = b.replace(/(d+)(.*)/g,' 1 $1'); // Month 1 YEAR
            return new Date(a) - new Date(b)
            )


            var after_arr1 =new datesort(arr1);
            var after_arr2 = arr1.reduce(function(a,b,c)
            var ind = after_arr1.indexOf(b);
            a[ind] = arr2[c]
            return a
            ,[]);


            console.log(after_arr1.join(','));
            console.log(after_arr2.join(','))








            share|improve this answer















            You need change the string for to new Date(dateString) format like



            new Date(Month Date Year)


            Updated regex Pattern for Both Array



            https://regex101.com/r/h1cm1z/2/



            Updated Sort Second array based on first array sorting index






            var arr1 = ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'];
            var arr2 =['55','2','3','0','21','132'];

            function datesort(arr)
            return arr.concat().sort((a,b)=>
            a = a.replace(/(d+)(.*)/g,' 1 $1'); // Month 1 YEAR
            b = b.replace(/(d+)(.*)/g,' 1 $1'); // Month 1 YEAR
            return new Date(a) - new Date(b)
            )


            var after_arr1 =new datesort(arr1);
            var after_arr2 = arr1.reduce(function(a,b,c)
            var ind = after_arr1.indexOf(b);
            a[ind] = arr2[c]
            return a
            ,[]);


            console.log(after_arr1.join(','));
            console.log(after_arr2.join(','))








            var arr1 = ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'];
            var arr2 =['55','2','3','0','21','132'];

            function datesort(arr)
            return arr.concat().sort((a,b)=>
            a = a.replace(/(d+)(.*)/g,' 1 $1'); // Month 1 YEAR
            b = b.replace(/(d+)(.*)/g,' 1 $1'); // Month 1 YEAR
            return new Date(a) - new Date(b)
            )


            var after_arr1 =new datesort(arr1);
            var after_arr2 = arr1.reduce(function(a,b,c)
            var ind = after_arr1.indexOf(b);
            a[ind] = arr2[c]
            return a
            ,[]);


            console.log(after_arr1.join(','));
            console.log(after_arr2.join(','))





            var arr1 = ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'];
            var arr2 =['55','2','3','0','21','132'];

            function datesort(arr)
            return arr.concat().sort((a,b)=>
            a = a.replace(/(d+)(.*)/g,' 1 $1'); // Month 1 YEAR
            b = b.replace(/(d+)(.*)/g,' 1 $1'); // Month 1 YEAR
            return new Date(a) - new Date(b)
            )


            var after_arr1 =new datesort(arr1);
            var after_arr2 = arr1.reduce(function(a,b,c)
            var ind = after_arr1.indexOf(b);
            a[ind] = arr2[c]
            return a
            ,[]);


            console.log(after_arr1.join(','));
            console.log(after_arr2.join(','))






            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited 11 hours ago

























            answered 17 hours ago









            prasanthprasanth

            13.7k21335




            13.7k21335












            • Thank you , it works as required. What if i have another array with values for each month respectively according to the monthyear array. how do i sort it when the monthyear moves to a new position. do you understand what i am saying?

              – Amir Qureshi
              17 hours ago











            • i could added the format of date .you could change your array value like this.If you have any new position .Kindly change regex pattern and reproduce the same date format.Or post your new position. i will give the matching pattern

              – prasanth
              17 hours ago











            • Or where did you get this array? You could format array with in pattern on the place of array create.or with something added delimiters like MM_YY,YY-MM

              – prasanth
              17 hours ago












            • i have updated the question please have a look .

              – Amir Qureshi
              17 hours ago






            • 1





              you need to sort array2 based on array1 sorted index position right?

              – prasanth
              17 hours ago

















            • Thank you , it works as required. What if i have another array with values for each month respectively according to the monthyear array. how do i sort it when the monthyear moves to a new position. do you understand what i am saying?

              – Amir Qureshi
              17 hours ago











            • i could added the format of date .you could change your array value like this.If you have any new position .Kindly change regex pattern and reproduce the same date format.Or post your new position. i will give the matching pattern

              – prasanth
              17 hours ago











            • Or where did you get this array? You could format array with in pattern on the place of array create.or with something added delimiters like MM_YY,YY-MM

              – prasanth
              17 hours ago












            • i have updated the question please have a look .

              – Amir Qureshi
              17 hours ago






            • 1





              you need to sort array2 based on array1 sorted index position right?

              – prasanth
              17 hours ago
















            Thank you , it works as required. What if i have another array with values for each month respectively according to the monthyear array. how do i sort it when the monthyear moves to a new position. do you understand what i am saying?

            – Amir Qureshi
            17 hours ago





            Thank you , it works as required. What if i have another array with values for each month respectively according to the monthyear array. how do i sort it when the monthyear moves to a new position. do you understand what i am saying?

            – Amir Qureshi
            17 hours ago













            i could added the format of date .you could change your array value like this.If you have any new position .Kindly change regex pattern and reproduce the same date format.Or post your new position. i will give the matching pattern

            – prasanth
            17 hours ago





            i could added the format of date .you could change your array value like this.If you have any new position .Kindly change regex pattern and reproduce the same date format.Or post your new position. i will give the matching pattern

            – prasanth
            17 hours ago













            Or where did you get this array? You could format array with in pattern on the place of array create.or with something added delimiters like MM_YY,YY-MM

            – prasanth
            17 hours ago






            Or where did you get this array? You could format array with in pattern on the place of array create.or with something added delimiters like MM_YY,YY-MM

            – prasanth
            17 hours ago














            i have updated the question please have a look .

            – Amir Qureshi
            17 hours ago





            i have updated the question please have a look .

            – Amir Qureshi
            17 hours ago




            1




            1





            you need to sort array2 based on array1 sorted index position right?

            – prasanth
            17 hours ago





            you need to sort array2 based on array1 sorted index position right?

            – prasanth
            17 hours ago











            8














            To order properly you need to know the order of the months. This is not alphabetical so you can use an array with the order of the months then look them up.



            const monthOrder = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']



            Is already properly sorted and can be used in conjunction with .indexOf() to get the position of a month.






            const myArr = ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'];
            const myArr2 = ['Mar19_value','Apr18_value','Jun18_value','Jul18_value','May18_value'
            ,'Jan19_value'];

            const monthOrder = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

            let sortYearMonth = (a, b) =>
            let monthA = monthOrder.indexOf(a.slice(0,3))
            let yearA = a.slice(3,6)
            let monthB = monthOrder.indexOf(b.slice(0,3))
            let yearB = b.slice(3,6)
            return (`$yearA-$monthA` < `$yearB-$monthB`) ? -1 : (`$yearA-$monthA` > `$yearB-$monthB`) ? 1 : 0


            let sortedMonths = myArr.sort(sortYearMonth)
            let sortedMonths2 = myArr2.sort(sortYearMonth)

            console.log(sortedMonths )
            console.log(sortedMonths2 )





            Update: values in same position



            Updated version links the two arrays together then sorts the first while keeping the relative position to the second.



            Idea: Link two arrays with a temporary Object then extract the key/value pair using Object.entries. Then sorting the array based on the first value of the pair, which is the value of array1. Then it returns the key/value pair in the right order you can extract the values into two arrays again by using .map()



            I added a run with the string based example and the real values examples below




            const myArr = ['Mar19', 'Apr18', 'Jun18', 'Jul18', 'May18', 'Jan19'];
            const myArr2 = ['Mar19_value', 'Apr18_value', 'Jun18_value', 'Jul18_value', 'May18_value', 'Jan19_value'];

            const myArr3 = ['55','2','3','0','21','132'];

            const monthOrder = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

            let sortYearMonth = (a, b) =>
            let monthA = monthOrder.indexOf(a.slice(0, 3))
            let yearA = a.slice(3, 6)
            let monthB = monthOrder.indexOf(b.slice(0, 3))
            let yearB = b.slice(3, 6)
            return (`$yearA-$monthA` < `$yearB-$monthB`) ? -1 : (`$yearA-$monthA` > `$yearB-$monthB`) ? 1 : 0


            function sortByFirst(myArr, myArr2)
            let keyValue = myArr.reduce((links, item, i) =>
            links[item] = myArr2[i];
            return links
            , )
            let entries = Object.entries(keyValue)
            return entries.sort((a, b) => sortYearMonth(a[0], b[0]))


            let sortedEntries = sortByFirst(myArr, myArr2)
            let sortedMonths = sortedEntries.map(i => i[0])
            let sortedValues = sortedEntries.map(i => i[1])

            let sortedEntries2 = sortByFirst(myArr, myArr3)
            let sortedMonths2 = sortedEntries2.map(i => i[0])
            let sortedValues2 = sortedEntries2.map(i => i[1])

            console.log(sortedMonths)
            console.log(sortedValues)

            console.log(sortedMonths2)
            console.log(sortedValues2)








            share|improve this answer

























            • i have done some changes in the question please can you have a look at it. sortYearMonth can not sort the values array because it does include month and year it justs integers. basically i want to get the new index of array1 items and then move array2 items to their new positions according to month names of array1

              – Amir Qureshi
              17 hours ago






            • 1





              Yes, I just got that :P, Let me update my answer, I will give you two options

              – Jordan Maduro
              17 hours ago











            • @AmirQureshi I updated to reflect your real updated question. Now you can sort two arrays where array 2 inherits array 1's new position

              – Jordan Maduro
              17 hours ago











            • let me check it please..

              – Amir Qureshi
              16 hours ago











            • @AmirQureshi See updated under my original answer

              – Jordan Maduro
              16 hours ago
















            8














            To order properly you need to know the order of the months. This is not alphabetical so you can use an array with the order of the months then look them up.



            const monthOrder = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']



            Is already properly sorted and can be used in conjunction with .indexOf() to get the position of a month.






            const myArr = ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'];
            const myArr2 = ['Mar19_value','Apr18_value','Jun18_value','Jul18_value','May18_value'
            ,'Jan19_value'];

            const monthOrder = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

            let sortYearMonth = (a, b) =>
            let monthA = monthOrder.indexOf(a.slice(0,3))
            let yearA = a.slice(3,6)
            let monthB = monthOrder.indexOf(b.slice(0,3))
            let yearB = b.slice(3,6)
            return (`$yearA-$monthA` < `$yearB-$monthB`) ? -1 : (`$yearA-$monthA` > `$yearB-$monthB`) ? 1 : 0


            let sortedMonths = myArr.sort(sortYearMonth)
            let sortedMonths2 = myArr2.sort(sortYearMonth)

            console.log(sortedMonths )
            console.log(sortedMonths2 )





            Update: values in same position



            Updated version links the two arrays together then sorts the first while keeping the relative position to the second.



            Idea: Link two arrays with a temporary Object then extract the key/value pair using Object.entries. Then sorting the array based on the first value of the pair, which is the value of array1. Then it returns the key/value pair in the right order you can extract the values into two arrays again by using .map()



            I added a run with the string based example and the real values examples below




            const myArr = ['Mar19', 'Apr18', 'Jun18', 'Jul18', 'May18', 'Jan19'];
            const myArr2 = ['Mar19_value', 'Apr18_value', 'Jun18_value', 'Jul18_value', 'May18_value', 'Jan19_value'];

            const myArr3 = ['55','2','3','0','21','132'];

            const monthOrder = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

            let sortYearMonth = (a, b) =>
            let monthA = monthOrder.indexOf(a.slice(0, 3))
            let yearA = a.slice(3, 6)
            let monthB = monthOrder.indexOf(b.slice(0, 3))
            let yearB = b.slice(3, 6)
            return (`$yearA-$monthA` < `$yearB-$monthB`) ? -1 : (`$yearA-$monthA` > `$yearB-$monthB`) ? 1 : 0


            function sortByFirst(myArr, myArr2)
            let keyValue = myArr.reduce((links, item, i) =>
            links[item] = myArr2[i];
            return links
            , )
            let entries = Object.entries(keyValue)
            return entries.sort((a, b) => sortYearMonth(a[0], b[0]))


            let sortedEntries = sortByFirst(myArr, myArr2)
            let sortedMonths = sortedEntries.map(i => i[0])
            let sortedValues = sortedEntries.map(i => i[1])

            let sortedEntries2 = sortByFirst(myArr, myArr3)
            let sortedMonths2 = sortedEntries2.map(i => i[0])
            let sortedValues2 = sortedEntries2.map(i => i[1])

            console.log(sortedMonths)
            console.log(sortedValues)

            console.log(sortedMonths2)
            console.log(sortedValues2)








            share|improve this answer

























            • i have done some changes in the question please can you have a look at it. sortYearMonth can not sort the values array because it does include month and year it justs integers. basically i want to get the new index of array1 items and then move array2 items to their new positions according to month names of array1

              – Amir Qureshi
              17 hours ago






            • 1





              Yes, I just got that :P, Let me update my answer, I will give you two options

              – Jordan Maduro
              17 hours ago











            • @AmirQureshi I updated to reflect your real updated question. Now you can sort two arrays where array 2 inherits array 1's new position

              – Jordan Maduro
              17 hours ago











            • let me check it please..

              – Amir Qureshi
              16 hours ago











            • @AmirQureshi See updated under my original answer

              – Jordan Maduro
              16 hours ago














            8












            8








            8







            To order properly you need to know the order of the months. This is not alphabetical so you can use an array with the order of the months then look them up.



            const monthOrder = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']



            Is already properly sorted and can be used in conjunction with .indexOf() to get the position of a month.






            const myArr = ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'];
            const myArr2 = ['Mar19_value','Apr18_value','Jun18_value','Jul18_value','May18_value'
            ,'Jan19_value'];

            const monthOrder = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

            let sortYearMonth = (a, b) =>
            let monthA = monthOrder.indexOf(a.slice(0,3))
            let yearA = a.slice(3,6)
            let monthB = monthOrder.indexOf(b.slice(0,3))
            let yearB = b.slice(3,6)
            return (`$yearA-$monthA` < `$yearB-$monthB`) ? -1 : (`$yearA-$monthA` > `$yearB-$monthB`) ? 1 : 0


            let sortedMonths = myArr.sort(sortYearMonth)
            let sortedMonths2 = myArr2.sort(sortYearMonth)

            console.log(sortedMonths )
            console.log(sortedMonths2 )





            Update: values in same position



            Updated version links the two arrays together then sorts the first while keeping the relative position to the second.



            Idea: Link two arrays with a temporary Object then extract the key/value pair using Object.entries. Then sorting the array based on the first value of the pair, which is the value of array1. Then it returns the key/value pair in the right order you can extract the values into two arrays again by using .map()



            I added a run with the string based example and the real values examples below




            const myArr = ['Mar19', 'Apr18', 'Jun18', 'Jul18', 'May18', 'Jan19'];
            const myArr2 = ['Mar19_value', 'Apr18_value', 'Jun18_value', 'Jul18_value', 'May18_value', 'Jan19_value'];

            const myArr3 = ['55','2','3','0','21','132'];

            const monthOrder = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

            let sortYearMonth = (a, b) =>
            let monthA = monthOrder.indexOf(a.slice(0, 3))
            let yearA = a.slice(3, 6)
            let monthB = monthOrder.indexOf(b.slice(0, 3))
            let yearB = b.slice(3, 6)
            return (`$yearA-$monthA` < `$yearB-$monthB`) ? -1 : (`$yearA-$monthA` > `$yearB-$monthB`) ? 1 : 0


            function sortByFirst(myArr, myArr2)
            let keyValue = myArr.reduce((links, item, i) =>
            links[item] = myArr2[i];
            return links
            , )
            let entries = Object.entries(keyValue)
            return entries.sort((a, b) => sortYearMonth(a[0], b[0]))


            let sortedEntries = sortByFirst(myArr, myArr2)
            let sortedMonths = sortedEntries.map(i => i[0])
            let sortedValues = sortedEntries.map(i => i[1])

            let sortedEntries2 = sortByFirst(myArr, myArr3)
            let sortedMonths2 = sortedEntries2.map(i => i[0])
            let sortedValues2 = sortedEntries2.map(i => i[1])

            console.log(sortedMonths)
            console.log(sortedValues)

            console.log(sortedMonths2)
            console.log(sortedValues2)








            share|improve this answer















            To order properly you need to know the order of the months. This is not alphabetical so you can use an array with the order of the months then look them up.



            const monthOrder = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']



            Is already properly sorted and can be used in conjunction with .indexOf() to get the position of a month.






            const myArr = ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'];
            const myArr2 = ['Mar19_value','Apr18_value','Jun18_value','Jul18_value','May18_value'
            ,'Jan19_value'];

            const monthOrder = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

            let sortYearMonth = (a, b) =>
            let monthA = monthOrder.indexOf(a.slice(0,3))
            let yearA = a.slice(3,6)
            let monthB = monthOrder.indexOf(b.slice(0,3))
            let yearB = b.slice(3,6)
            return (`$yearA-$monthA` < `$yearB-$monthB`) ? -1 : (`$yearA-$monthA` > `$yearB-$monthB`) ? 1 : 0


            let sortedMonths = myArr.sort(sortYearMonth)
            let sortedMonths2 = myArr2.sort(sortYearMonth)

            console.log(sortedMonths )
            console.log(sortedMonths2 )





            Update: values in same position



            Updated version links the two arrays together then sorts the first while keeping the relative position to the second.



            Idea: Link two arrays with a temporary Object then extract the key/value pair using Object.entries. Then sorting the array based on the first value of the pair, which is the value of array1. Then it returns the key/value pair in the right order you can extract the values into two arrays again by using .map()



            I added a run with the string based example and the real values examples below




            const myArr = ['Mar19', 'Apr18', 'Jun18', 'Jul18', 'May18', 'Jan19'];
            const myArr2 = ['Mar19_value', 'Apr18_value', 'Jun18_value', 'Jul18_value', 'May18_value', 'Jan19_value'];

            const myArr3 = ['55','2','3','0','21','132'];

            const monthOrder = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

            let sortYearMonth = (a, b) =>
            let monthA = monthOrder.indexOf(a.slice(0, 3))
            let yearA = a.slice(3, 6)
            let monthB = monthOrder.indexOf(b.slice(0, 3))
            let yearB = b.slice(3, 6)
            return (`$yearA-$monthA` < `$yearB-$monthB`) ? -1 : (`$yearA-$monthA` > `$yearB-$monthB`) ? 1 : 0


            function sortByFirst(myArr, myArr2)
            let keyValue = myArr.reduce((links, item, i) =>
            links[item] = myArr2[i];
            return links
            , )
            let entries = Object.entries(keyValue)
            return entries.sort((a, b) => sortYearMonth(a[0], b[0]))


            let sortedEntries = sortByFirst(myArr, myArr2)
            let sortedMonths = sortedEntries.map(i => i[0])
            let sortedValues = sortedEntries.map(i => i[1])

            let sortedEntries2 = sortByFirst(myArr, myArr3)
            let sortedMonths2 = sortedEntries2.map(i => i[0])
            let sortedValues2 = sortedEntries2.map(i => i[1])

            console.log(sortedMonths)
            console.log(sortedValues)

            console.log(sortedMonths2)
            console.log(sortedValues2)








            const myArr = ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'];
            const myArr2 = ['Mar19_value','Apr18_value','Jun18_value','Jul18_value','May18_value'
            ,'Jan19_value'];

            const monthOrder = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

            let sortYearMonth = (a, b) =>
            let monthA = monthOrder.indexOf(a.slice(0,3))
            let yearA = a.slice(3,6)
            let monthB = monthOrder.indexOf(b.slice(0,3))
            let yearB = b.slice(3,6)
            return (`$yearA-$monthA` < `$yearB-$monthB`) ? -1 : (`$yearA-$monthA` > `$yearB-$monthB`) ? 1 : 0


            let sortedMonths = myArr.sort(sortYearMonth)
            let sortedMonths2 = myArr2.sort(sortYearMonth)

            console.log(sortedMonths )
            console.log(sortedMonths2 )





            const myArr = ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'];
            const myArr2 = ['Mar19_value','Apr18_value','Jun18_value','Jul18_value','May18_value'
            ,'Jan19_value'];

            const monthOrder = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

            let sortYearMonth = (a, b) =>
            let monthA = monthOrder.indexOf(a.slice(0,3))
            let yearA = a.slice(3,6)
            let monthB = monthOrder.indexOf(b.slice(0,3))
            let yearB = b.slice(3,6)
            return (`$yearA-$monthA` < `$yearB-$monthB`) ? -1 : (`$yearA-$monthA` > `$yearB-$monthB`) ? 1 : 0


            let sortedMonths = myArr.sort(sortYearMonth)
            let sortedMonths2 = myArr2.sort(sortYearMonth)

            console.log(sortedMonths )
            console.log(sortedMonths2 )





            const myArr = ['Mar19', 'Apr18', 'Jun18', 'Jul18', 'May18', 'Jan19'];
            const myArr2 = ['Mar19_value', 'Apr18_value', 'Jun18_value', 'Jul18_value', 'May18_value', 'Jan19_value'];

            const myArr3 = ['55','2','3','0','21','132'];

            const monthOrder = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

            let sortYearMonth = (a, b) =>
            let monthA = monthOrder.indexOf(a.slice(0, 3))
            let yearA = a.slice(3, 6)
            let monthB = monthOrder.indexOf(b.slice(0, 3))
            let yearB = b.slice(3, 6)
            return (`$yearA-$monthA` < `$yearB-$monthB`) ? -1 : (`$yearA-$monthA` > `$yearB-$monthB`) ? 1 : 0


            function sortByFirst(myArr, myArr2)
            let keyValue = myArr.reduce((links, item, i) =>
            links[item] = myArr2[i];
            return links
            , )
            let entries = Object.entries(keyValue)
            return entries.sort((a, b) => sortYearMonth(a[0], b[0]))


            let sortedEntries = sortByFirst(myArr, myArr2)
            let sortedMonths = sortedEntries.map(i => i[0])
            let sortedValues = sortedEntries.map(i => i[1])

            let sortedEntries2 = sortByFirst(myArr, myArr3)
            let sortedMonths2 = sortedEntries2.map(i => i[0])
            let sortedValues2 = sortedEntries2.map(i => i[1])

            console.log(sortedMonths)
            console.log(sortedValues)

            console.log(sortedMonths2)
            console.log(sortedValues2)





            const myArr = ['Mar19', 'Apr18', 'Jun18', 'Jul18', 'May18', 'Jan19'];
            const myArr2 = ['Mar19_value', 'Apr18_value', 'Jun18_value', 'Jul18_value', 'May18_value', 'Jan19_value'];

            const myArr3 = ['55','2','3','0','21','132'];

            const monthOrder = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

            let sortYearMonth = (a, b) =>
            let monthA = monthOrder.indexOf(a.slice(0, 3))
            let yearA = a.slice(3, 6)
            let monthB = monthOrder.indexOf(b.slice(0, 3))
            let yearB = b.slice(3, 6)
            return (`$yearA-$monthA` < `$yearB-$monthB`) ? -1 : (`$yearA-$monthA` > `$yearB-$monthB`) ? 1 : 0


            function sortByFirst(myArr, myArr2)
            let keyValue = myArr.reduce((links, item, i) =>
            links[item] = myArr2[i];
            return links
            , )
            let entries = Object.entries(keyValue)
            return entries.sort((a, b) => sortYearMonth(a[0], b[0]))


            let sortedEntries = sortByFirst(myArr, myArr2)
            let sortedMonths = sortedEntries.map(i => i[0])
            let sortedValues = sortedEntries.map(i => i[1])

            let sortedEntries2 = sortByFirst(myArr, myArr3)
            let sortedMonths2 = sortedEntries2.map(i => i[0])
            let sortedValues2 = sortedEntries2.map(i => i[1])

            console.log(sortedMonths)
            console.log(sortedValues)

            console.log(sortedMonths2)
            console.log(sortedValues2)






            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited 16 hours ago

























            answered 17 hours ago









            Jordan MaduroJordan Maduro

            47827




            47827












            • i have done some changes in the question please can you have a look at it. sortYearMonth can not sort the values array because it does include month and year it justs integers. basically i want to get the new index of array1 items and then move array2 items to their new positions according to month names of array1

              – Amir Qureshi
              17 hours ago






            • 1





              Yes, I just got that :P, Let me update my answer, I will give you two options

              – Jordan Maduro
              17 hours ago











            • @AmirQureshi I updated to reflect your real updated question. Now you can sort two arrays where array 2 inherits array 1's new position

              – Jordan Maduro
              17 hours ago











            • let me check it please..

              – Amir Qureshi
              16 hours ago











            • @AmirQureshi See updated under my original answer

              – Jordan Maduro
              16 hours ago


















            • i have done some changes in the question please can you have a look at it. sortYearMonth can not sort the values array because it does include month and year it justs integers. basically i want to get the new index of array1 items and then move array2 items to their new positions according to month names of array1

              – Amir Qureshi
              17 hours ago






            • 1





              Yes, I just got that :P, Let me update my answer, I will give you two options

              – Jordan Maduro
              17 hours ago











            • @AmirQureshi I updated to reflect your real updated question. Now you can sort two arrays where array 2 inherits array 1's new position

              – Jordan Maduro
              17 hours ago











            • let me check it please..

              – Amir Qureshi
              16 hours ago











            • @AmirQureshi See updated under my original answer

              – Jordan Maduro
              16 hours ago

















            i have done some changes in the question please can you have a look at it. sortYearMonth can not sort the values array because it does include month and year it justs integers. basically i want to get the new index of array1 items and then move array2 items to their new positions according to month names of array1

            – Amir Qureshi
            17 hours ago





            i have done some changes in the question please can you have a look at it. sortYearMonth can not sort the values array because it does include month and year it justs integers. basically i want to get the new index of array1 items and then move array2 items to their new positions according to month names of array1

            – Amir Qureshi
            17 hours ago




            1




            1





            Yes, I just got that :P, Let me update my answer, I will give you two options

            – Jordan Maduro
            17 hours ago





            Yes, I just got that :P, Let me update my answer, I will give you two options

            – Jordan Maduro
            17 hours ago













            @AmirQureshi I updated to reflect your real updated question. Now you can sort two arrays where array 2 inherits array 1's new position

            – Jordan Maduro
            17 hours ago





            @AmirQureshi I updated to reflect your real updated question. Now you can sort two arrays where array 2 inherits array 1's new position

            – Jordan Maduro
            17 hours ago













            let me check it please..

            – Amir Qureshi
            16 hours ago





            let me check it please..

            – Amir Qureshi
            16 hours ago













            @AmirQureshi See updated under my original answer

            – Jordan Maduro
            16 hours ago






            @AmirQureshi See updated under my original answer

            – Jordan Maduro
            16 hours ago












            8

















            const input = ['Mar19', 'Apr18', 'Jun18', 'Jul18', 'May18', 'Jan19'];

            //const output : ['Apr18','May18','Jun18','Jul18','Jan19','Mar19'];
            //Can be done easily by using momentjs, darte-fns, but here i will do it natively

            const t =
            Jan: 1,
            Feb: 2,
            Mar: 3,
            Apr: 4,
            May: 5,
            Jun: 6,
            Jul: 7,
            Aug: 8,
            Sep: 9,
            Oct: 10,
            Nov: 11,
            Dec: 12

            const giveConcatString = (a, t) =>
            const monthPart = a.substr(0, 3)
            const yearPart = a.substr(3)
            return `$yearPart$t[monthPart]`

            const sortedArray = input.sort((a, b) =>
            const concatString = giveConcatString(a, t)
            const concatStringB = giveConcatString(b, t)
            return concatString <= concatStringB ? -1 : 1

            )
            console.log(sortedArray)





            This may help you solve this problem. Did it natively.






            share|improve this answer

























            • Doesnt work correctly, check your result out

              – Jordan Maduro
              17 hours ago











            • yes let me edit

              – simbathesailor
              17 hours ago











            • check now Thanks

              – simbathesailor
              17 hours ago















            8

















            const input = ['Mar19', 'Apr18', 'Jun18', 'Jul18', 'May18', 'Jan19'];

            //const output : ['Apr18','May18','Jun18','Jul18','Jan19','Mar19'];
            //Can be done easily by using momentjs, darte-fns, but here i will do it natively

            const t =
            Jan: 1,
            Feb: 2,
            Mar: 3,
            Apr: 4,
            May: 5,
            Jun: 6,
            Jul: 7,
            Aug: 8,
            Sep: 9,
            Oct: 10,
            Nov: 11,
            Dec: 12

            const giveConcatString = (a, t) =>
            const monthPart = a.substr(0, 3)
            const yearPart = a.substr(3)
            return `$yearPart$t[monthPart]`

            const sortedArray = input.sort((a, b) =>
            const concatString = giveConcatString(a, t)
            const concatStringB = giveConcatString(b, t)
            return concatString <= concatStringB ? -1 : 1

            )
            console.log(sortedArray)





            This may help you solve this problem. Did it natively.






            share|improve this answer

























            • Doesnt work correctly, check your result out

              – Jordan Maduro
              17 hours ago











            • yes let me edit

              – simbathesailor
              17 hours ago











            • check now Thanks

              – simbathesailor
              17 hours ago













            8












            8








            8










            const input = ['Mar19', 'Apr18', 'Jun18', 'Jul18', 'May18', 'Jan19'];

            //const output : ['Apr18','May18','Jun18','Jul18','Jan19','Mar19'];
            //Can be done easily by using momentjs, darte-fns, but here i will do it natively

            const t =
            Jan: 1,
            Feb: 2,
            Mar: 3,
            Apr: 4,
            May: 5,
            Jun: 6,
            Jul: 7,
            Aug: 8,
            Sep: 9,
            Oct: 10,
            Nov: 11,
            Dec: 12

            const giveConcatString = (a, t) =>
            const monthPart = a.substr(0, 3)
            const yearPart = a.substr(3)
            return `$yearPart$t[monthPart]`

            const sortedArray = input.sort((a, b) =>
            const concatString = giveConcatString(a, t)
            const concatStringB = giveConcatString(b, t)
            return concatString <= concatStringB ? -1 : 1

            )
            console.log(sortedArray)





            This may help you solve this problem. Did it natively.






            share|improve this answer


















            const input = ['Mar19', 'Apr18', 'Jun18', 'Jul18', 'May18', 'Jan19'];

            //const output : ['Apr18','May18','Jun18','Jul18','Jan19','Mar19'];
            //Can be done easily by using momentjs, darte-fns, but here i will do it natively

            const t =
            Jan: 1,
            Feb: 2,
            Mar: 3,
            Apr: 4,
            May: 5,
            Jun: 6,
            Jul: 7,
            Aug: 8,
            Sep: 9,
            Oct: 10,
            Nov: 11,
            Dec: 12

            const giveConcatString = (a, t) =>
            const monthPart = a.substr(0, 3)
            const yearPart = a.substr(3)
            return `$yearPart$t[monthPart]`

            const sortedArray = input.sort((a, b) =>
            const concatString = giveConcatString(a, t)
            const concatStringB = giveConcatString(b, t)
            return concatString <= concatStringB ? -1 : 1

            )
            console.log(sortedArray)





            This may help you solve this problem. Did it natively.






            const input = ['Mar19', 'Apr18', 'Jun18', 'Jul18', 'May18', 'Jan19'];

            //const output : ['Apr18','May18','Jun18','Jul18','Jan19','Mar19'];
            //Can be done easily by using momentjs, darte-fns, but here i will do it natively

            const t =
            Jan: 1,
            Feb: 2,
            Mar: 3,
            Apr: 4,
            May: 5,
            Jun: 6,
            Jul: 7,
            Aug: 8,
            Sep: 9,
            Oct: 10,
            Nov: 11,
            Dec: 12

            const giveConcatString = (a, t) =>
            const monthPart = a.substr(0, 3)
            const yearPart = a.substr(3)
            return `$yearPart$t[monthPart]`

            const sortedArray = input.sort((a, b) =>
            const concatString = giveConcatString(a, t)
            const concatStringB = giveConcatString(b, t)
            return concatString <= concatStringB ? -1 : 1

            )
            console.log(sortedArray)





            const input = ['Mar19', 'Apr18', 'Jun18', 'Jul18', 'May18', 'Jan19'];

            //const output : ['Apr18','May18','Jun18','Jul18','Jan19','Mar19'];
            //Can be done easily by using momentjs, darte-fns, but here i will do it natively

            const t =
            Jan: 1,
            Feb: 2,
            Mar: 3,
            Apr: 4,
            May: 5,
            Jun: 6,
            Jul: 7,
            Aug: 8,
            Sep: 9,
            Oct: 10,
            Nov: 11,
            Dec: 12

            const giveConcatString = (a, t) =>
            const monthPart = a.substr(0, 3)
            const yearPart = a.substr(3)
            return `$yearPart$t[monthPart]`

            const sortedArray = input.sort((a, b) =>
            const concatString = giveConcatString(a, t)
            const concatStringB = giveConcatString(b, t)
            return concatString <= concatStringB ? -1 : 1

            )
            console.log(sortedArray)






            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited 16 hours ago

























            answered 17 hours ago









            simbathesailorsimbathesailor

            2,23411018




            2,23411018












            • Doesnt work correctly, check your result out

              – Jordan Maduro
              17 hours ago











            • yes let me edit

              – simbathesailor
              17 hours ago











            • check now Thanks

              – simbathesailor
              17 hours ago

















            • Doesnt work correctly, check your result out

              – Jordan Maduro
              17 hours ago











            • yes let me edit

              – simbathesailor
              17 hours ago











            • check now Thanks

              – simbathesailor
              17 hours ago
















            Doesnt work correctly, check your result out

            – Jordan Maduro
            17 hours ago





            Doesnt work correctly, check your result out

            – Jordan Maduro
            17 hours ago













            yes let me edit

            – simbathesailor
            17 hours ago





            yes let me edit

            – simbathesailor
            17 hours ago













            check now Thanks

            – simbathesailor
            17 hours ago





            check now Thanks

            – simbathesailor
            17 hours ago











            3














            You can try this raw snippet.






            var MY = ['Mar19', 'Apr18', 'Jun18', 'Jul18', 'May18', 'Jan19'];
            var s = "JanFebMarAprMayJunJulAugSepOctNovDec";
            // converting to raw date format
            for (i in MY)
            num = MY[i].match(/d+/g);
            letr = MY[i].match(/[a-zA-Z]+/g);
            MY[i] = (s.indexOf(letr) / 3 + 1) + '-' + '20' + num;

            // sorting logic
            var sorted = MY.sort(function(a, b)
            a = a.split("-");
            b = b.split("-")
            return new Date(a[1], a[0], 1) - new Date(b[1], b[0], 1)
            );
            // converting back to original array after sorting
            res = [];
            for (i in sorted)
            var a = sorted[i].split('-');
            res[i] = (s.substr((parseInt(a[0]) - 1) * 3, 3)) + '-' + a[1].substr(2, 2);


            console.log(res);








            share|improve this answer



























              3














              You can try this raw snippet.






              var MY = ['Mar19', 'Apr18', 'Jun18', 'Jul18', 'May18', 'Jan19'];
              var s = "JanFebMarAprMayJunJulAugSepOctNovDec";
              // converting to raw date format
              for (i in MY)
              num = MY[i].match(/d+/g);
              letr = MY[i].match(/[a-zA-Z]+/g);
              MY[i] = (s.indexOf(letr) / 3 + 1) + '-' + '20' + num;

              // sorting logic
              var sorted = MY.sort(function(a, b)
              a = a.split("-");
              b = b.split("-")
              return new Date(a[1], a[0], 1) - new Date(b[1], b[0], 1)
              );
              // converting back to original array after sorting
              res = [];
              for (i in sorted)
              var a = sorted[i].split('-');
              res[i] = (s.substr((parseInt(a[0]) - 1) * 3, 3)) + '-' + a[1].substr(2, 2);


              console.log(res);








              share|improve this answer

























                3












                3








                3







                You can try this raw snippet.






                var MY = ['Mar19', 'Apr18', 'Jun18', 'Jul18', 'May18', 'Jan19'];
                var s = "JanFebMarAprMayJunJulAugSepOctNovDec";
                // converting to raw date format
                for (i in MY)
                num = MY[i].match(/d+/g);
                letr = MY[i].match(/[a-zA-Z]+/g);
                MY[i] = (s.indexOf(letr) / 3 + 1) + '-' + '20' + num;

                // sorting logic
                var sorted = MY.sort(function(a, b)
                a = a.split("-");
                b = b.split("-")
                return new Date(a[1], a[0], 1) - new Date(b[1], b[0], 1)
                );
                // converting back to original array after sorting
                res = [];
                for (i in sorted)
                var a = sorted[i].split('-');
                res[i] = (s.substr((parseInt(a[0]) - 1) * 3, 3)) + '-' + a[1].substr(2, 2);


                console.log(res);








                share|improve this answer













                You can try this raw snippet.






                var MY = ['Mar19', 'Apr18', 'Jun18', 'Jul18', 'May18', 'Jan19'];
                var s = "JanFebMarAprMayJunJulAugSepOctNovDec";
                // converting to raw date format
                for (i in MY)
                num = MY[i].match(/d+/g);
                letr = MY[i].match(/[a-zA-Z]+/g);
                MY[i] = (s.indexOf(letr) / 3 + 1) + '-' + '20' + num;

                // sorting logic
                var sorted = MY.sort(function(a, b)
                a = a.split("-");
                b = b.split("-")
                return new Date(a[1], a[0], 1) - new Date(b[1], b[0], 1)
                );
                // converting back to original array after sorting
                res = [];
                for (i in sorted)
                var a = sorted[i].split('-');
                res[i] = (s.substr((parseInt(a[0]) - 1) * 3, 3)) + '-' + a[1].substr(2, 2);


                console.log(res);








                var MY = ['Mar19', 'Apr18', 'Jun18', 'Jul18', 'May18', 'Jan19'];
                var s = "JanFebMarAprMayJunJulAugSepOctNovDec";
                // converting to raw date format
                for (i in MY)
                num = MY[i].match(/d+/g);
                letr = MY[i].match(/[a-zA-Z]+/g);
                MY[i] = (s.indexOf(letr) / 3 + 1) + '-' + '20' + num;

                // sorting logic
                var sorted = MY.sort(function(a, b)
                a = a.split("-");
                b = b.split("-")
                return new Date(a[1], a[0], 1) - new Date(b[1], b[0], 1)
                );
                // converting back to original array after sorting
                res = [];
                for (i in sorted)
                var a = sorted[i].split('-');
                res[i] = (s.substr((parseInt(a[0]) - 1) * 3, 3)) + '-' + a[1].substr(2, 2);


                console.log(res);





                var MY = ['Mar19', 'Apr18', 'Jun18', 'Jul18', 'May18', 'Jan19'];
                var s = "JanFebMarAprMayJunJulAugSepOctNovDec";
                // converting to raw date format
                for (i in MY)
                num = MY[i].match(/d+/g);
                letr = MY[i].match(/[a-zA-Z]+/g);
                MY[i] = (s.indexOf(letr) / 3 + 1) + '-' + '20' + num;

                // sorting logic
                var sorted = MY.sort(function(a, b)
                a = a.split("-");
                b = b.split("-")
                return new Date(a[1], a[0], 1) - new Date(b[1], b[0], 1)
                );
                // converting back to original array after sorting
                res = [];
                for (i in sorted)
                var a = sorted[i].split('-');
                res[i] = (s.substr((parseInt(a[0]) - 1) * 3, 3)) + '-' + a[1].substr(2, 2);


                console.log(res);






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered 17 hours ago









                Rahul MeshramRahul Meshram

                7,28041942




                7,28041942





















                    2














                    I used lodash for sorting and substring method to divide date into month and day parts






                    const data = ['Mar20','Mar21', 'Mar01', 'Mar19','Apr18','Jun18','Jul18','May18','Jan19']

                    const monthMap = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];

                    const sorted = _.sortBy(data, date => monthMap.indexOf(date.substring(0,3)), date => date.substring(3,5))

                    console.log(sorted)

                    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>








                    share|improve this answer



























                      2














                      I used lodash for sorting and substring method to divide date into month and day parts






                      const data = ['Mar20','Mar21', 'Mar01', 'Mar19','Apr18','Jun18','Jul18','May18','Jan19']

                      const monthMap = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];

                      const sorted = _.sortBy(data, date => monthMap.indexOf(date.substring(0,3)), date => date.substring(3,5))

                      console.log(sorted)

                      <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>








                      share|improve this answer

























                        2












                        2








                        2







                        I used lodash for sorting and substring method to divide date into month and day parts






                        const data = ['Mar20','Mar21', 'Mar01', 'Mar19','Apr18','Jun18','Jul18','May18','Jan19']

                        const monthMap = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];

                        const sorted = _.sortBy(data, date => monthMap.indexOf(date.substring(0,3)), date => date.substring(3,5))

                        console.log(sorted)

                        <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>








                        share|improve this answer













                        I used lodash for sorting and substring method to divide date into month and day parts






                        const data = ['Mar20','Mar21', 'Mar01', 'Mar19','Apr18','Jun18','Jul18','May18','Jan19']

                        const monthMap = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];

                        const sorted = _.sortBy(data, date => monthMap.indexOf(date.substring(0,3)), date => date.substring(3,5))

                        console.log(sorted)

                        <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>








                        const data = ['Mar20','Mar21', 'Mar01', 'Mar19','Apr18','Jun18','Jul18','May18','Jan19']

                        const monthMap = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];

                        const sorted = _.sortBy(data, date => monthMap.indexOf(date.substring(0,3)), date => date.substring(3,5))

                        console.log(sorted)

                        <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>





                        const data = ['Mar20','Mar21', 'Mar01', 'Mar19','Apr18','Jun18','Jul18','May18','Jan19']

                        const monthMap = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];

                        const sorted = _.sortBy(data, date => monthMap.indexOf(date.substring(0,3)), date => date.substring(3,5))

                        console.log(sorted)

                        <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>






                        share|improve this answer












                        share|improve this answer



                        share|improve this answer










                        answered 17 hours ago









                        Krzysztof KrzeszewskiKrzysztof Krzeszewski

                        7641110




                        7641110





















                            2














                            let mth = ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'];

                            mth.sort((itemA, itemB)=>
                            let mthAstr = itemA.slice(0,3)+" 01 "+itemA.slice(3,5);
                            let mthA = new Date(mthAstr);
                            let mthBstr = itemB.slice(0,3)+" 01 "+itemB.slice(3,5);
                            let mthB = new Date(mthBstr);
                            if (mthA < mthB)
                            return -1;
                            if (mthA > mthB)
                            return 1;
                            return 0;
                            );





                            share|improve this answer



























                              2














                              let mth = ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'];

                              mth.sort((itemA, itemB)=>
                              let mthAstr = itemA.slice(0,3)+" 01 "+itemA.slice(3,5);
                              let mthA = new Date(mthAstr);
                              let mthBstr = itemB.slice(0,3)+" 01 "+itemB.slice(3,5);
                              let mthB = new Date(mthBstr);
                              if (mthA < mthB)
                              return -1;
                              if (mthA > mthB)
                              return 1;
                              return 0;
                              );





                              share|improve this answer

























                                2












                                2








                                2







                                let mth = ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'];

                                mth.sort((itemA, itemB)=>
                                let mthAstr = itemA.slice(0,3)+" 01 "+itemA.slice(3,5);
                                let mthA = new Date(mthAstr);
                                let mthBstr = itemB.slice(0,3)+" 01 "+itemB.slice(3,5);
                                let mthB = new Date(mthBstr);
                                if (mthA < mthB)
                                return -1;
                                if (mthA > mthB)
                                return 1;
                                return 0;
                                );





                                share|improve this answer













                                let mth = ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'];

                                mth.sort((itemA, itemB)=>
                                let mthAstr = itemA.slice(0,3)+" 01 "+itemA.slice(3,5);
                                let mthA = new Date(mthAstr);
                                let mthBstr = itemB.slice(0,3)+" 01 "+itemB.slice(3,5);
                                let mthB = new Date(mthBstr);
                                if (mthA < mthB)
                                return -1;
                                if (mthA > mthB)
                                return 1;
                                return 0;
                                );






                                share|improve this answer












                                share|improve this answer



                                share|improve this answer










                                answered 17 hours ago









                                EdperEdper

                                7,21711842




                                7,21711842





















                                    2














                                    You can try something like that :



                                    var Array = ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'];
                                    Array.sort(function(a, b)
                                    a = [a.slice(0,3), ' 20', a.slice(3)].join('');
                                    b = [b.slice(0,3), ' 20', b.slice(3)].join('')
                                    return new Date() - new Date(b);
                                    );

                                    console.log(Array);





                                    share|improve this answer










                                    New contributor




                                    KAMLESH NEHRA is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                    Check out our Code of Conduct.
























                                      2














                                      You can try something like that :



                                      var Array = ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'];
                                      Array.sort(function(a, b)
                                      a = [a.slice(0,3), ' 20', a.slice(3)].join('');
                                      b = [b.slice(0,3), ' 20', b.slice(3)].join('')
                                      return new Date() - new Date(b);
                                      );

                                      console.log(Array);





                                      share|improve this answer










                                      New contributor




                                      KAMLESH NEHRA is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                      Check out our Code of Conduct.






















                                        2












                                        2








                                        2







                                        You can try something like that :



                                        var Array = ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'];
                                        Array.sort(function(a, b)
                                        a = [a.slice(0,3), ' 20', a.slice(3)].join('');
                                        b = [b.slice(0,3), ' 20', b.slice(3)].join('')
                                        return new Date() - new Date(b);
                                        );

                                        console.log(Array);





                                        share|improve this answer










                                        New contributor




                                        KAMLESH NEHRA is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                        Check out our Code of Conduct.










                                        You can try something like that :



                                        var Array = ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'];
                                        Array.sort(function(a, b)
                                        a = [a.slice(0,3), ' 20', a.slice(3)].join('');
                                        b = [b.slice(0,3), ' 20', b.slice(3)].join('')
                                        return new Date() - new Date(b);
                                        );

                                        console.log(Array);






                                        share|improve this answer










                                        New contributor




                                        KAMLESH NEHRA is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                        Check out our Code of Conduct.









                                        share|improve this answer



                                        share|improve this answer








                                        edited 16 hours ago









                                        Enzo BLANCHON

                                        653216




                                        653216






                                        New contributor




                                        KAMLESH NEHRA is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                        Check out our Code of Conduct.









                                        answered 17 hours ago









                                        KAMLESH NEHRAKAMLESH NEHRA

                                        212




                                        212




                                        New contributor




                                        KAMLESH NEHRA is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                        Check out our Code of Conduct.





                                        New contributor





                                        KAMLESH NEHRA is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                        Check out our Code of Conduct.






                                        KAMLESH NEHRA is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                        Check out our Code of Conduct.





















                                            0














                                            I would suggest that your data structure is unfortunate. Working with shared indices makes it much more difficult than a data structure that combines them, such as an array of objects, [label: 'Mar19', value: 55, ...].



                                            If your data is coming from an upstream solution you cannot control, you can still manage this in your own work, converting before you use it. (And if you really have to converting back to pass to others.)



                                            A common name for a function combining two arrays is zip -- think of it acting like a zipper. This version uses one that takes a function to say how the paired elements should be combined. (Elsewhere such a function might be called zipWith.)



                                            Here sortArraysByDate calls zip passing a function that turns 'Mar19' and 55 into label: 'Mar19, value: 55, month: 'Mar', year: 19 using dateFields to extract the month and year from that label, then sorts these using the straightforward dateSort






                                            const months = Jan: 1, Feb: 2, Mar: 3, Apr: 4, May: 5, Jun: 6,
                                            Jul: 7, Aug: 8, Sep: 9, Oct: 10, Nov: 11, Dec: 12

                                            const dateFields = (d) => (
                                            month: d.slice(0, 3),
                                            year: Number(d.slice(3))
                                            )

                                            const dateSort = (month: m1, year: y1, month: m2, year: y2) =>
                                            (y1 - y2) || (months[m1] - months[m2])

                                            const zip = (fn, a1, a2) => a1.map((a, i) => fn(a, a2[i]))

                                            const sortArraysByDate = (a1, a2) =>
                                            zip((label, value) => (label, value, ...dateFields(label)), a1, a2)
                                            .sort(dateSort)
                                            .map((label, value) => (label, value))


                                            const Array1 = ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'];
                                            const Array2 = ['55','2','3','0','21','132']; //real values

                                            const result = sortArraysByDate(Array1, Array2)

                                            console.log(result)





                                            The map call in sortArraysByDate is quite possibly not necessary. Without it, the resulting data includes extra year and month fields; that might not be an issue.



                                            If you really need those updated arrays in the original format, you can just map the result:



                                            const newArray1 = result.map(o => o.label)
                                            const newArray2 = result.map(o => o.value)


                                            But I would urge you not to do this unless it's absolutely necessary. This structure is really useful. The paired arrays are much less so.



                                            Also, if you need to combine more than two arrays, you could write a slightly more sophisticated version of zip:



                                            const zip = (fn, ...as) => as[0].map((_, i) => fn(...as.map(a => a[i])))


                                            This takes a function on n arguments, and n arrays, and yields a new array containing the result of calling that function respectively on the successive items in each of the arrays.






                                            share|improve this answer





























                                              0














                                              I would suggest that your data structure is unfortunate. Working with shared indices makes it much more difficult than a data structure that combines them, such as an array of objects, [label: 'Mar19', value: 55, ...].



                                              If your data is coming from an upstream solution you cannot control, you can still manage this in your own work, converting before you use it. (And if you really have to converting back to pass to others.)



                                              A common name for a function combining two arrays is zip -- think of it acting like a zipper. This version uses one that takes a function to say how the paired elements should be combined. (Elsewhere such a function might be called zipWith.)



                                              Here sortArraysByDate calls zip passing a function that turns 'Mar19' and 55 into label: 'Mar19, value: 55, month: 'Mar', year: 19 using dateFields to extract the month and year from that label, then sorts these using the straightforward dateSort






                                              const months = Jan: 1, Feb: 2, Mar: 3, Apr: 4, May: 5, Jun: 6,
                                              Jul: 7, Aug: 8, Sep: 9, Oct: 10, Nov: 11, Dec: 12

                                              const dateFields = (d) => (
                                              month: d.slice(0, 3),
                                              year: Number(d.slice(3))
                                              )

                                              const dateSort = (month: m1, year: y1, month: m2, year: y2) =>
                                              (y1 - y2) || (months[m1] - months[m2])

                                              const zip = (fn, a1, a2) => a1.map((a, i) => fn(a, a2[i]))

                                              const sortArraysByDate = (a1, a2) =>
                                              zip((label, value) => (label, value, ...dateFields(label)), a1, a2)
                                              .sort(dateSort)
                                              .map((label, value) => (label, value))


                                              const Array1 = ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'];
                                              const Array2 = ['55','2','3','0','21','132']; //real values

                                              const result = sortArraysByDate(Array1, Array2)

                                              console.log(result)





                                              The map call in sortArraysByDate is quite possibly not necessary. Without it, the resulting data includes extra year and month fields; that might not be an issue.



                                              If you really need those updated arrays in the original format, you can just map the result:



                                              const newArray1 = result.map(o => o.label)
                                              const newArray2 = result.map(o => o.value)


                                              But I would urge you not to do this unless it's absolutely necessary. This structure is really useful. The paired arrays are much less so.



                                              Also, if you need to combine more than two arrays, you could write a slightly more sophisticated version of zip:



                                              const zip = (fn, ...as) => as[0].map((_, i) => fn(...as.map(a => a[i])))


                                              This takes a function on n arguments, and n arrays, and yields a new array containing the result of calling that function respectively on the successive items in each of the arrays.






                                              share|improve this answer



























                                                0












                                                0








                                                0







                                                I would suggest that your data structure is unfortunate. Working with shared indices makes it much more difficult than a data structure that combines them, such as an array of objects, [label: 'Mar19', value: 55, ...].



                                                If your data is coming from an upstream solution you cannot control, you can still manage this in your own work, converting before you use it. (And if you really have to converting back to pass to others.)



                                                A common name for a function combining two arrays is zip -- think of it acting like a zipper. This version uses one that takes a function to say how the paired elements should be combined. (Elsewhere such a function might be called zipWith.)



                                                Here sortArraysByDate calls zip passing a function that turns 'Mar19' and 55 into label: 'Mar19, value: 55, month: 'Mar', year: 19 using dateFields to extract the month and year from that label, then sorts these using the straightforward dateSort






                                                const months = Jan: 1, Feb: 2, Mar: 3, Apr: 4, May: 5, Jun: 6,
                                                Jul: 7, Aug: 8, Sep: 9, Oct: 10, Nov: 11, Dec: 12

                                                const dateFields = (d) => (
                                                month: d.slice(0, 3),
                                                year: Number(d.slice(3))
                                                )

                                                const dateSort = (month: m1, year: y1, month: m2, year: y2) =>
                                                (y1 - y2) || (months[m1] - months[m2])

                                                const zip = (fn, a1, a2) => a1.map((a, i) => fn(a, a2[i]))

                                                const sortArraysByDate = (a1, a2) =>
                                                zip((label, value) => (label, value, ...dateFields(label)), a1, a2)
                                                .sort(dateSort)
                                                .map((label, value) => (label, value))


                                                const Array1 = ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'];
                                                const Array2 = ['55','2','3','0','21','132']; //real values

                                                const result = sortArraysByDate(Array1, Array2)

                                                console.log(result)





                                                The map call in sortArraysByDate is quite possibly not necessary. Without it, the resulting data includes extra year and month fields; that might not be an issue.



                                                If you really need those updated arrays in the original format, you can just map the result:



                                                const newArray1 = result.map(o => o.label)
                                                const newArray2 = result.map(o => o.value)


                                                But I would urge you not to do this unless it's absolutely necessary. This structure is really useful. The paired arrays are much less so.



                                                Also, if you need to combine more than two arrays, you could write a slightly more sophisticated version of zip:



                                                const zip = (fn, ...as) => as[0].map((_, i) => fn(...as.map(a => a[i])))


                                                This takes a function on n arguments, and n arrays, and yields a new array containing the result of calling that function respectively on the successive items in each of the arrays.






                                                share|improve this answer















                                                I would suggest that your data structure is unfortunate. Working with shared indices makes it much more difficult than a data structure that combines them, such as an array of objects, [label: 'Mar19', value: 55, ...].



                                                If your data is coming from an upstream solution you cannot control, you can still manage this in your own work, converting before you use it. (And if you really have to converting back to pass to others.)



                                                A common name for a function combining two arrays is zip -- think of it acting like a zipper. This version uses one that takes a function to say how the paired elements should be combined. (Elsewhere such a function might be called zipWith.)



                                                Here sortArraysByDate calls zip passing a function that turns 'Mar19' and 55 into label: 'Mar19, value: 55, month: 'Mar', year: 19 using dateFields to extract the month and year from that label, then sorts these using the straightforward dateSort






                                                const months = Jan: 1, Feb: 2, Mar: 3, Apr: 4, May: 5, Jun: 6,
                                                Jul: 7, Aug: 8, Sep: 9, Oct: 10, Nov: 11, Dec: 12

                                                const dateFields = (d) => (
                                                month: d.slice(0, 3),
                                                year: Number(d.slice(3))
                                                )

                                                const dateSort = (month: m1, year: y1, month: m2, year: y2) =>
                                                (y1 - y2) || (months[m1] - months[m2])

                                                const zip = (fn, a1, a2) => a1.map((a, i) => fn(a, a2[i]))

                                                const sortArraysByDate = (a1, a2) =>
                                                zip((label, value) => (label, value, ...dateFields(label)), a1, a2)
                                                .sort(dateSort)
                                                .map((label, value) => (label, value))


                                                const Array1 = ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'];
                                                const Array2 = ['55','2','3','0','21','132']; //real values

                                                const result = sortArraysByDate(Array1, Array2)

                                                console.log(result)





                                                The map call in sortArraysByDate is quite possibly not necessary. Without it, the resulting data includes extra year and month fields; that might not be an issue.



                                                If you really need those updated arrays in the original format, you can just map the result:



                                                const newArray1 = result.map(o => o.label)
                                                const newArray2 = result.map(o => o.value)


                                                But I would urge you not to do this unless it's absolutely necessary. This structure is really useful. The paired arrays are much less so.



                                                Also, if you need to combine more than two arrays, you could write a slightly more sophisticated version of zip:



                                                const zip = (fn, ...as) => as[0].map((_, i) => fn(...as.map(a => a[i])))


                                                This takes a function on n arguments, and n arrays, and yields a new array containing the result of calling that function respectively on the successive items in each of the arrays.






                                                const months = Jan: 1, Feb: 2, Mar: 3, Apr: 4, May: 5, Jun: 6,
                                                Jul: 7, Aug: 8, Sep: 9, Oct: 10, Nov: 11, Dec: 12

                                                const dateFields = (d) => (
                                                month: d.slice(0, 3),
                                                year: Number(d.slice(3))
                                                )

                                                const dateSort = (month: m1, year: y1, month: m2, year: y2) =>
                                                (y1 - y2) || (months[m1] - months[m2])

                                                const zip = (fn, a1, a2) => a1.map((a, i) => fn(a, a2[i]))

                                                const sortArraysByDate = (a1, a2) =>
                                                zip((label, value) => (label, value, ...dateFields(label)), a1, a2)
                                                .sort(dateSort)
                                                .map((label, value) => (label, value))


                                                const Array1 = ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'];
                                                const Array2 = ['55','2','3','0','21','132']; //real values

                                                const result = sortArraysByDate(Array1, Array2)

                                                console.log(result)





                                                const months = Jan: 1, Feb: 2, Mar: 3, Apr: 4, May: 5, Jun: 6,
                                                Jul: 7, Aug: 8, Sep: 9, Oct: 10, Nov: 11, Dec: 12

                                                const dateFields = (d) => (
                                                month: d.slice(0, 3),
                                                year: Number(d.slice(3))
                                                )

                                                const dateSort = (month: m1, year: y1, month: m2, year: y2) =>
                                                (y1 - y2) || (months[m1] - months[m2])

                                                const zip = (fn, a1, a2) => a1.map((a, i) => fn(a, a2[i]))

                                                const sortArraysByDate = (a1, a2) =>
                                                zip((label, value) => (label, value, ...dateFields(label)), a1, a2)
                                                .sort(dateSort)
                                                .map((label, value) => (label, value))


                                                const Array1 = ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'];
                                                const Array2 = ['55','2','3','0','21','132']; //real values

                                                const result = sortArraysByDate(Array1, Array2)

                                                console.log(result)






                                                share|improve this answer














                                                share|improve this answer



                                                share|improve this answer








                                                edited 7 hours ago

























                                                answered 8 hours ago









                                                Scott SauyetScott Sauyet

                                                20.8k22757




                                                20.8k22757



























                                                    draft saved

                                                    draft discarded
















































                                                    Thanks for contributing an answer to Stack Overflow!


                                                    • Please be sure to answer the question. Provide details and share your research!

                                                    But avoid


                                                    • Asking for help, clarification, or responding to other answers.

                                                    • Making statements based on opinion; back them up with references or personal experience.

                                                    To learn more, see our tips on writing great answers.




                                                    draft saved


                                                    draft discarded














                                                    StackExchange.ready(
                                                    function ()
                                                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55061324%2fsort-array-by-month-and-year%23new-answer', 'question_page');

                                                    );

                                                    Post as a guest















                                                    Required, but never shown





















































                                                    Required, but never shown














                                                    Required, but never shown












                                                    Required, but never shown







                                                    Required, but never shown

































                                                    Required, but never shown














                                                    Required, but never shown












                                                    Required, but never shown







                                                    Required, but never shown







                                                    Popular posts from this blog

                                                    Frič See also Navigation menuinternal link

                                                    Identify plant with long narrow paired leaves and reddish stems Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) Announcing the arrival of Valued Associate #679: Cesar Manara Unicorn Meta Zoo #1: Why another podcast?What is this plant with long sharp leaves? Is it a weed?What is this 3ft high, stalky plant, with mid sized narrow leaves?What is this young shrub with opposite ovate, crenate leaves and reddish stems?What is this plant with large broad serrated leaves?Identify this upright branching weed with long leaves and reddish stemsPlease help me identify this bulbous plant with long, broad leaves and white flowersWhat is this small annual with narrow gray/green leaves and rust colored daisy-type flowers?What is this chilli plant?Does anyone know what type of chilli plant this is?Help identify this plant

                                                    fontconfig warning: “/etc/fonts/fonts.conf”, line 100: unknown “element blank” The 2019 Stack Overflow Developer Survey Results Are In“tar: unrecognized option --warning” during 'apt-get install'How to fix Fontconfig errorHow do I figure out which font file is chosen for a system generic font alias?Why are some apt-get-installed fonts being ignored by fc-list, xfontsel, etc?Reload settings in /etc/fonts/conf.dTaking 30 seconds longer to boot after upgrade from jessie to stretchHow to match multiple font names with a single <match> element?Adding a custom font to fontconfigRemoving fonts from fontconfig <match> resultsBroken fonts after upgrading Firefox ESR to latest Firefox