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);
});