admin管理员组文章数量:1387397
I am trying to sort numeric string using sortbyorder
function of lodash
.
Function should work as normal on string only fields but should sort in numeric order in case of numeral string.
Sample array object is as follows:
[{
"timeInProcessing": "20 min",
"timeInManual": "8 min",
"taskID": "653452",
"reasonType": "Customer Request",
"assignedStatus": "Robinson, Edwin",
"virtualMachine": "[machine name]",
"lastAction": "1st processing fail",
"region": "EU",
"project": "Demo Chue STAGE Media Extracts 04",
"fileName": "Depósito à Prazo BC - BI de Abril a 08 JUN 2016.xlsx",
"index": "1.0",
"fileRoom": "NRP TriPost",
"fileType": "xlsx",
"fileSize": "22.49 MB",
"processedBy": "n/a",
"uploadedBy": "Johnson III, Chadwick",
"node": "SPWD6PDGDS001"
}, {
"timeInProcessing": "15 min",
"timeInManual": "7 min",
"taskID": "765435",
"reasonType": "Multiple Attachments",
"assignedStatus": "Robinson, Edwin",
"virtualMachine": "[machine name]",
"lastAction": "2nd processing fail",
"region": "EU",
"project": "Blue Thunder",
"fileName": "lorem_ipsum_dolor.msg",
"index": "1.1",
"fileRoom": "North America",
"fileType": "msg",
"fileSize": "0.51 MB",
"processedBy": "Chandwik, Eric",
"uploadedBy": "Williamson, Lucinda",
"node": "SPWD6PDGDS002"
}, {
"timeInProcessing": "10 min",
"timeInManual": "n/a",
"taskID": "765436",
"reasonType": "Customer Request",
"assignedStatus": "Unassigned",
"virtualMachine": "n/a",
"lastAction": "[TBD]",
"region": "AP",
"project": "Hercules",
"fileName": "lorem_ipsum_dolor.msg",
"index": "1.1.1",
"fileRoom": "STAGING-Enterprise HR",
"fileType": "msg",
"fileSize": "0.01 MB",
"processedBy": "Holland, Roberta",
"uploadedBy": "Trisko, Dora",
"node": "SPWD6PDGDS005"
}, ]
the field on which I am trying to sort is timeInProcessing
.
I am trying to sort numeric string using sortbyorder
function of lodash
.
Function should work as normal on string only fields but should sort in numeric order in case of numeral string.
Sample array object is as follows:
[{
"timeInProcessing": "20 min",
"timeInManual": "8 min",
"taskID": "653452",
"reasonType": "Customer Request",
"assignedStatus": "Robinson, Edwin",
"virtualMachine": "[machine name]",
"lastAction": "1st processing fail",
"region": "EU",
"project": "Demo Chue STAGE Media Extracts 04",
"fileName": "Depósito à Prazo BC - BI de Abril a 08 JUN 2016.xlsx",
"index": "1.0",
"fileRoom": "NRP TriPost",
"fileType": "xlsx",
"fileSize": "22.49 MB",
"processedBy": "n/a",
"uploadedBy": "Johnson III, Chadwick",
"node": "SPWD6PDGDS001"
}, {
"timeInProcessing": "15 min",
"timeInManual": "7 min",
"taskID": "765435",
"reasonType": "Multiple Attachments",
"assignedStatus": "Robinson, Edwin",
"virtualMachine": "[machine name]",
"lastAction": "2nd processing fail",
"region": "EU",
"project": "Blue Thunder",
"fileName": "lorem_ipsum_dolor.msg",
"index": "1.1",
"fileRoom": "North America",
"fileType": "msg",
"fileSize": "0.51 MB",
"processedBy": "Chandwik, Eric",
"uploadedBy": "Williamson, Lucinda",
"node": "SPWD6PDGDS002"
}, {
"timeInProcessing": "10 min",
"timeInManual": "n/a",
"taskID": "765436",
"reasonType": "Customer Request",
"assignedStatus": "Unassigned",
"virtualMachine": "n/a",
"lastAction": "[TBD]",
"region": "AP",
"project": "Hercules",
"fileName": "lorem_ipsum_dolor.msg",
"index": "1.1.1",
"fileRoom": "STAGING-Enterprise HR",
"fileType": "msg",
"fileSize": "0.01 MB",
"processedBy": "Holland, Roberta",
"uploadedBy": "Trisko, Dora",
"node": "SPWD6PDGDS005"
}, ]
the field on which I am trying to sort is timeInProcessing
.
2 Answers
Reset to default 5You may use a sort callback. It takes a key and returns either the numerical value or the original value, if the value would be NaN
.
function byKey(key) {
return function (o) {
var v = parseInt(o[key], 10);
return isNaN(v) ? o[key] : v;
};
}
With lodash 4.17.2 _.sortBy
:
function byKey(key) {
return function (o) {
var v = parseInt(o[key], 10);
return isNaN(v) ? o[key] : v;
};
}
var data = [{ timeInProcessing: "20 min", timeInManual: "8 min", taskID: "653452" }, { timeInProcessing: "15 min", timeInManual: "7 min", taskID: "765435" }, { timeInProcessing: "10 min", timeInManual: "n/a", "taskID": "765436" }, { timeInProcessing: "min", timeInManual: "n/a", "taskID": "7654XX" }, { timeInProcessing: "abc", timeInManual: "n/a", "taskID": "7654YY" }],
sorted = _.sortBy(data, byKey('timeInProcessing'));
console.log(sorted);
_.reverse(sorted);
console.log(sorted);
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare./ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>
With lodash 3.10.1 _.sortByOrder
:
function byKey(key) {
return function (o) {
var v = parseInt(o[key], 10);
return isNaN(v) ? o[key] : v;
};
}
var data = [{ timeInProcessing: "20 min", timeInManual: "8 min", taskID: "653452" }, { timeInProcessing: "15 min", timeInManual: "7 min", taskID: "765435" }, { timeInProcessing: "10 min", timeInManual: "n/a", "taskID": "765436" }, { timeInProcessing: "min", timeInManual: "n/a", "taskID": "7654XX" }, { timeInProcessing: "abc", timeInManual: "n/a", "taskID": "7654YY" }],
sorted = _.sortByOrder(data, byKey('timeInProcessing'), ['asc']);
console.log(sorted);
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare./ajax/libs/lodash.js/3.10.1/lodash.min.js"></script>
I have added a property in your object sortKey
. This is to hold numeric value for timeInProcessing
. This will allow you to sort using numeric value.
Also in the following sample, I sorting using uploadedBy
first and then parsed value to depict sorting on more than 1 key
var data=[{timeInProcessing:"20 min",timeInManual:"8 min",taskID:"653452",reasonType:"Customer Request",assignedStatus:"Robinson, Edwin",virtualMachine:"[machine name]",lastAction:"1st processing fail",region:"EU",project:"Demo Chue STAGE Media Extracts 04",fileName:"Depósito à Prazo BC - BI de Abril a 08 JUN 2016.xlsx",index:"1.0",fileRoom:"NRP TriPost",fileType:"xlsx",fileSize:"22.49 MB",processedBy:"n/a",uploadedBy:"Johnson III, Chadwick",node:"SPWD6PDGDS001"},{timeInProcessing:"15 min",timeInManual:"7 min",taskID:"765435",reasonType:"Multiple Attachments",assignedStatus:"Robinson, Edwin",virtualMachine:"[machine name]",lastAction:"2nd processing fail",region:"EU",project:"Blue Thunder",fileName:"lorem_ipsum_dolor.msg",index:"1.1",fileRoom:"North America",fileType:"msg",fileSize:"0.51 MB",processedBy:"Chandwik, Eric",uploadedBy:"Williamson, Lucinda",node:"SPWD6PDGDS002"},{timeInProcessing:"10 min",timeInManual:"n/a",taskID:"765436",reasonType:"Customer Request",assignedStatus:"Unassigned",virtualMachine:"n/a",lastAction:"[TBD]",region:"AP",project:"Hercules",fileName:"lorem_ipsum_dolor.msg",index:"1.1.1",fileRoom:"STAGING-Enterprise HR",fileType:"msg",fileSize:"0.01 MB",processedBy:"Holland, Roberta",uploadedBy:"Trisko, Dora",node:"SPWD6PDGDS005"}];
var sortedOrder = _.sortByOrder(_.map(data, function(o) {
o["timeInProcessing_num"] = parseInt(o.timeInProcessing, 10);
return o;
}), ["uploadedBy", "timeInProcessing_num"])
console.log(sortedOrder)
<script src="https://cdnjs.cloudflare./ajax/libs/lodash.js/3.10.0/lodash.min.js"></script>
本文标签: javascriptsort by numeric string using sortByOrder lodashStack Overflow
版权声明:本文标题:javascript - sort by numeric string using _.sortByOrder lodash - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744527642a2610840.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论