Home > Software engineering >  Sort an json array based on regex match
Sort an json array based on regex match

Time:10-25

I have a json array called attachments where I need to sort based on sort_based_on_this_order array.

var sort_based_on_this_order = ['1666432801510', '1666434048280', '1666433926644', '1666434169913', '1666433101760', '1666434194815', '1666432849037', '1666432764144', '1666432044571', '1666432742444']

sort_based_on_this_order array contains the filename key value of attachments json array

var attachments = [
                {
                   
                    "download_small_url": "https://kf.kobotoolbox.org/api/v2/assets/ajDWYWQoe9Gw6WAnK8H4fG/data/194338021/attachments/82978911/",
                    "mimetype": "image/jpeg",
                    "filename": "deploymentsmaster/attachments/a46854ceb37c4e55b4a2c5ea565c4ebf/04ac3197-7d0f-4301-bbaf-68daaee2b1a8/1666433926644.jpg",
                    "instance": 194338021,
                    "xform": 740320,
                    "id": 82978911
                },
                {
                   
                    "download_small_url": "https://kf.kobotoolbox.org/api/v2/assets/ajDWYWQoe9Gw6WAnK8H4fG/data/194338021/attachments/82978910/",
                    "mimetype": "image/jpeg",
                    "filename": "deploymentsmaster/attachments/a46854ceb37c4e55b4a2c5ea565c4ebf/04ac3197-7d0f-4301-bbaf-68daaee2b1a8/1666434169913.jpg",
                    "instance": 194338021,
                    "xform": 740320,
                    "id": 82978910
                },
                {
                   
                    "download_small_url": "https://kf.kobotoolbox.org/api/v2/assets/ajDWYWQoe9Gw6WAnK8H4fG/data/194338021/attachments/82978909/",
                    "mimetype": "image/jpeg",
                    "filename": "deploymentsmaster/attachments/a46854ceb37c4e55b4a2c5ea565c4ebf/04ac3197-7d0f-4301-bbaf-68daaee2b1a8/1666434048280.jpg",
                    "instance": 194338021,
                    "xform": 740320,
                    "id": 82978909
                },
                {
                   
                    "download_small_url": "https://kf.kobotoolbox.org/api/v2/assets/ajDWYWQoe9Gw6WAnK8H4fG/data/194338021/attachments/82978907/",
                    "mimetype": "image/jpeg",
                    "filename": "deploymentsmaster/attachments/a46854ceb37c4e55b4a2c5ea565c4ebf/04ac3197-7d0f-4301-bbaf-68daaee2b1a8/1666433101760.jpg",
                    "instance": 194338021,
                    "xform": 740320,
                    "id": 82978907
                },
                {
                   
                    "download_small_url": "https://kf.kobotoolbox.org/api/v2/assets/ajDWYWQoe9Gw6WAnK8H4fG/data/194338021/attachments/82978905/",
                    "mimetype": "image/jpeg",
                    "filename": "deploymentsmaster/attachments/a46854ceb37c4e55b4a2c5ea565c4ebf/04ac3197-7d0f-4301-bbaf-68daaee2b1a8/1666434194815.jpg",
                    "instance": 194338021,
                    "xform": 740320,
                    "id": 82978905
                },
                {
                   
                    "download_small_url": "https://kf.kobotoolbox.org/api/v2/assets/ajDWYWQoe9Gw6WAnK8H4fG/data/194338021/attachments/82978904/",
                    "mimetype": "image/jpeg",
                    "filename": "deploymentsmaster/attachments/a46854ceb37c4e55b4a2c5ea565c4ebf/04ac3197-7d0f-4301-bbaf-68daaee2b1a8/1666432849037.jpg",
                    "instance": 194338021,
                    "xform": 740320,
                    "id": 82978904
                },
                {
                   
                    "download_small_url": "https://kf.kobotoolbox.org/api/v2/assets/ajDWYWQoe9Gw6WAnK8H4fG/data/194338021/attachments/82978903/",
                    "mimetype": "image/jpeg",
                    "filename": "deploymentsmaster/attachments/a46854ceb37c4e55b4a2c5ea565c4ebf/04ac3197-7d0f-4301-bbaf-68daaee2b1a8/1666432801510.jpg",
                    "instance": 194338021,
                    "xform": 740320,
                    "id": 82978903
                },
                {
                   
                    "download_small_url": "https://kf.kobotoolbox.org/api/v2/assets/ajDWYWQoe9Gw6WAnK8H4fG/data/194338021/attachments/82978902/",
                    "mimetype": "image/jpeg",
                    "filename": "deploymentsmaster/attachments/a46854ceb37c4e55b4a2c5ea565c4ebf/04ac3197-7d0f-4301-bbaf-68daaee2b1a8/1666432764144.jpg",
                    "instance": 194338021,
                    "xform": 740320,
                    "id": 82978902
                },
                {
                   
                    "download_small_url": "https://kf.kobotoolbox.org/api/v2/assets/ajDWYWQoe9Gw6WAnK8H4fG/data/194338021/attachments/82978901/",
                    "mimetype": "image/jpeg",
                    "filename": "deploymentsmaster/attachments/a46854ceb37c4e55b4a2c5ea565c4ebf/04ac3197-7d0f-4301-bbaf-68daaee2b1a8/1666432044571.jpg",
                    "instance": 194338021,
                    "xform": 740320,
                    "id": 82978901
                },
                {
                   
                    "download_small_url": "https://kf.kobotoolbox.org/api/v2/assets/ajDWYWQoe9Gw6WAnK8H4fG/data/194338021/attachments/82978900/",
                    "mimetype": "image/jpeg",
                    "filename": "deploymentsmaster/attachments/a46854ceb37c4e55b4a2c5ea565c4ebf/04ac3197-7d0f-4301-bbaf-68daaee2b1a8/1666432742444.jpg",
                    "instance": 194338021,
                    "xform": 740320,
                    "id": 82978900
                }
            ]

I have tried with

attachments.sort.forEach(zz => {
                return zz["filename"].match(/\b[0-9]{13}(?=\.[^.] $)/)
            })

CodePudding user response:

You can use following code to sort it

attachments.sort((a,b) =>{
   let k1 = a.filename.match(/\b[0-9]{13}(?=\.[^.] $)/)
   let k2 = b.filename.match(/\b[0-9]{13}(?=\.[^.] $)/)
   let i1 = sort_based_on_this_order.indexOf(k1[0])
   let i2 = sort_based_on_this_order.indexOf(k2[0])
   return i1 > i2 ? 1:-1
})

var attachments = [
                {
                   
                    "download_small_url": "https://kf.kobotoolbox.org/api/v2/assets/ajDWYWQoe9Gw6WAnK8H4fG/data/194338021/attachments/82978911/",
                    "mimetype": "image/jpeg",
                    "filename": "deploymentsmaster/attachments/a46854ceb37c4e55b4a2c5ea565c4ebf/04ac3197-7d0f-4301-bbaf-68daaee2b1a8/1666433926644.jpg",
                    "instance": 194338021,
                    "xform": 740320,
                    "id": 82978911
                },
                {
                   
                    "download_small_url": "https://kf.kobotoolbox.org/api/v2/assets/ajDWYWQoe9Gw6WAnK8H4fG/data/194338021/attachments/82978910/",
                    "mimetype": "image/jpeg",
                    "filename": "deploymentsmaster/attachments/a46854ceb37c4e55b4a2c5ea565c4ebf/04ac3197-7d0f-4301-bbaf-68daaee2b1a8/1666434169913.jpg",
                    "instance": 194338021,
                    "xform": 740320,
                    "id": 82978910
                },
                {
                   
                    "download_small_url": "https://kf.kobotoolbox.org/api/v2/assets/ajDWYWQoe9Gw6WAnK8H4fG/data/194338021/attachments/82978909/",
                    "mimetype": "image/jpeg",
                    "filename": "deploymentsmaster/attachments/a46854ceb37c4e55b4a2c5ea565c4ebf/04ac3197-7d0f-4301-bbaf-68daaee2b1a8/1666434048280.jpg",
                    "instance": 194338021,
                    "xform": 740320,
                    "id": 82978909
                },
                {
                   
                    "download_small_url": "https://kf.kobotoolbox.org/api/v2/assets/ajDWYWQoe9Gw6WAnK8H4fG/data/194338021/attachments/82978907/",
                    "mimetype": "image/jpeg",
                    "filename": "deploymentsmaster/attachments/a46854ceb37c4e55b4a2c5ea565c4ebf/04ac3197-7d0f-4301-bbaf-68daaee2b1a8/1666433101760.jpg",
                    "instance": 194338021,
                    "xform": 740320,
                    "id": 82978907
                },
                {
                   
                    "download_small_url": "https://kf.kobotoolbox.org/api/v2/assets/ajDWYWQoe9Gw6WAnK8H4fG/data/194338021/attachments/82978905/",
                    "mimetype": "image/jpeg",
                    "filename": "deploymentsmaster/attachments/a46854ceb37c4e55b4a2c5ea565c4ebf/04ac3197-7d0f-4301-bbaf-68daaee2b1a8/1666434194815.jpg",
                    "instance": 194338021,
                    "xform": 740320,
                    "id": 82978905
                },
                {
                   
                    "download_small_url": "https://kf.kobotoolbox.org/api/v2/assets/ajDWYWQoe9Gw6WAnK8H4fG/data/194338021/attachments/82978904/",
                    "mimetype": "image/jpeg",
                    "filename": "deploymentsmaster/attachments/a46854ceb37c4e55b4a2c5ea565c4ebf/04ac3197-7d0f-4301-bbaf-68daaee2b1a8/1666432849037.jpg",
                    "instance": 194338021,
                    "xform": 740320,
                    "id": 82978904
                },
                {
                   
                    "download_small_url": "https://kf.kobotoolbox.org/api/v2/assets/ajDWYWQoe9Gw6WAnK8H4fG/data/194338021/attachments/82978903/",
                    "mimetype": "image/jpeg",
                    "filename": "deploymentsmaster/attachments/a46854ceb37c4e55b4a2c5ea565c4ebf/04ac3197-7d0f-4301-bbaf-68daaee2b1a8/1666432801510.jpg",
                    "instance": 194338021,
                    "xform": 740320,
                    "id": 82978903
                },
                {
                   
                    "download_small_url": "https://kf.kobotoolbox.org/api/v2/assets/ajDWYWQoe9Gw6WAnK8H4fG/data/194338021/attachments/82978902/",
                    "mimetype": "image/jpeg",
                    "filename": "deploymentsmaster/attachments/a46854ceb37c4e55b4a2c5ea565c4ebf/04ac3197-7d0f-4301-bbaf-68daaee2b1a8/1666432764144.jpg",
                    "instance": 194338021,
                    "xform": 740320,
                    "id": 82978902
                },
                {
                   
                    "download_small_url": "https://kf.kobotoolbox.org/api/v2/assets/ajDWYWQoe9Gw6WAnK8H4fG/data/194338021/attachments/82978901/",
                    "mimetype": "image/jpeg",
                    "filename": "deploymentsmaster/attachments/a46854ceb37c4e55b4a2c5ea565c4ebf/04ac3197-7d0f-4301-bbaf-68daaee2b1a8/1666432044571.jpg",
                    "instance": 194338021,
                    "xform": 740320,
                    "id": 82978901
                },
                {
                   
                    "download_small_url": "https://kf.kobotoolbox.org/api/v2/assets/ajDWYWQoe9Gw6WAnK8H4fG/data/194338021/attachments/82978900/",
                    "mimetype": "image/jpeg",
                    "filename": "deploymentsmaster/attachments/a46854ceb37c4e55b4a2c5ea565c4ebf/04ac3197-7d0f-4301-bbaf-68daaee2b1a8/1666432742444.jpg",
                    "instance": 194338021,
                    "xform": 740320,
                    "id": 82978900
                }
            ]
var sort_based_on_this_order = ['1666432801510', '1666434048280', '1666433926644', '1666434169913', '1666433101760', '1666434194815', '1666432849037', '1666432764144', '1666432044571', '1666432742444']     
     
attachments.sort((a,b) =>{
   let k1 = a.filename.match(/\b[0-9]{13}(?=\.[^.] $)/)
   let k2 = b.filename.match(/\b[0-9]{13}(?=\.[^.] $)/)
   let i1 = sort_based_on_this_order.indexOf(k1[0])
   let i2 = sort_based_on_this_order.indexOf(k2[0])
   return i1 > i2 ? 1:-1
})

console.log(attachments)

CodePudding user response:

you can use package https://www.npmjs.com/package/match-sorter for solve this problem

CodePudding user response:

If I understand correctly, you want to sort the attachments array based on the sort_based_on_this_order array (I however don't see the values matching in both arrays, so maybe you try something else which I could not figure out?)

You can sort based on an other array by using the indexOf for the other array in the sort.

attachments.sort((a, b) => {  
  return sort_based_on_this_order.indexOf(a.fileName) - sort_based_on_this_order .indexOf(b.fileName);
});
  • Related