2017-01-12 2 views
1

Я пытаюсь сделать сортировать числовую строку используя sortbyorder function of lodash.сортировать по числовой строке, используя _.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" 
}, ] 

поле, на котором я пытаюсь сортировать вне timeInProcessing.

ответ

2

Вы можете использовать услугу обратного вызова. Он принимает ключ и возвращает либо числовое значение, либо исходное значение, если значение будет NaN.

function byKey(key) { 
    return function (o) { 
     var v = parseInt(o[key], 10); 
     return isNaN(v) ? o[key] : v; 
    }; 
} 

С 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.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>

С 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.com/ajax/libs/lodash.js/3.10.1/lodash.min.js"></script>

+0

вы можете привести пример, как использовать эту функцию обратного вызова в sortByOrder? –

+0

Мне также нужно указать заказ –

+0

@SahilAgarwal для нисходящего порядка использовать ['_.reverse'] (https://lodash.com/docs/4.17.2#reverse) –

0

Я уже добавила недвижимость в свой блокнот sortKey. Это значение должно содержать числовое значение для timeInProcessing. Это позволит вам сортировать с помощью числового значения.

Кроме того, в следующем примере, я сортировки с использованием uploadedBy первый, а затем анализироваться значение изобразить сортировку на более чем 1 ключ

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.com/ajax/libs/lodash.js/3.10.0/lodash.min.js"></script>

+0

просто подсказка, пожалуйста, используйте 'parseInt' с базой. –

+0

@NinaScholz Done. :-) – Rajesh

Смежные вопросы