我想排序数字字符串使用sortbyorder的功能lodash。
函数应该在仅字符串字段上正常工作,但在数字字符串的情况下应该按数字顺序排序。
示例数组对象如下:
[{
"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"
}, ]
Run Code Online (Sandbox Code Playgroud)
我试图排序的字段是timeInProcessing.
您可以使用排序回调。它接受一个键并返回数值或原始值(如果该值是 )NaN。
function byKey(key) {
return function (o) {
var v = parseInt(o[key], 10);
return isNaN(v) ? o[key] : v;
};
}
Run Code Online (Sandbox Code Playgroud)
使用 lodash 4.17.2 _.sortBy:
function byKey(key) {
return function (o) {
var v = parseInt(o[key], 10);
return isNaN(v) ? o[key] : v;
};
}
Run Code Online (Sandbox Code Playgroud)
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);Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }Run Code Online (Sandbox Code Playgroud)
使用 lodash 3.10.1 _.sortByOrder:
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>Run Code Online (Sandbox Code Playgroud)
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);Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }Run Code Online (Sandbox Code Playgroud)