按转换后的项目按 Lodash 顺序排序,无需更改它



我有这样的数据

let data = [
{DATE: "2017-08-18", COUNT: "65", EVENT_NAME: "TAX_EXEMPTION_FAILURE"},
{DATE: "2017-08-18", COUNT: "63", EVENT_NAME: "FRAUD_NOT_DONE"},
{DATE: "2017-08-18", COUNT: "4451", EVENT_NAME: "FRAUD_ACCEPT"},
];

我想按COUNT的数字值排序,就像65, 63, 4451一样,作为数字而不是字符串。我无法更改数据,因为它以它所在的格式显示在表中(我将按5050%数据进行排序,但显示50%等(

基于 Lodash :如何使用 orderBy 对集合进行不区分大小写的排序?,我将[item => parseInt(item)]传递给orderBy

以下脚本不起作用:

const _ = require("lodash");
const orderBy = require('lodash/orderBy');
// import some from 'lodash/some';
function isNumber(item) {
let isnum = /^d+$/.test(item);
return isnum;
}
function are_all_numbers(data, key) {
let values = _.map(data, key);
return _.every(values, isNumber);
}
let data = [
{DATE: "2017-08-18", COUNT: "65", EVENT_NAME: "TAX_EXEMPTION_FAILURE"},
{DATE: "2017-08-18", COUNT: "63", EVENT_NAME: "FRAUD_NOT_DONE"},
{DATE: "2017-08-18", COUNT: "4451", EVENT_NAME: "FRAUD_ACCEPT"},
];
let order = 'descending';
let all_are_numbers = are_all_numbers(data, 'COUNT');
console.log('all_are_numbers:');
console.log(all_are_numbers);
if (all_are_numbers) {
var orderByResults = orderBy(
data,
[item => parseInt(item)],
['desc']
);
} else {
var orderByResults = orderBy(
data,
prop,
order === 'descending' ? 'desc' : 'asc'
);
}
console.log(orderByResults);

它运行:

$ node test_script.js 
all_are_numbers:
true
[ { DATE: '2017-08-18',
COUNT: '65',
EVENT_NAME: 'TAX_EXEMPTION_FAILURE' },
{ DATE: '2017-08-18', COUNT: '63', EVENT_NAME: 'FRAUD_NOT_DONE' },
{ DATE: '2017-08-18', COUNT: '4451', EVENT_NAME: 'FRAUD_ACCEPT' } ]

为什么不按parseInt在这里排序?

你应该告诉 orderBy 按item.COUNT进行排序:

[item => parseInt(item.COUNT)],

orderBy = _.orderBy;
function isNumber(item) {
let isnum = /^d+$/.test(item);
return isnum;
}
function are_all_numbers(data, key) {
let values = _.map(data, key);
return _.every(values, isNumber);
}
let data = [
{DATE: "2017-08-18", COUNT: "65", EVENT_NAME: "TAX_EXEMPTION_FAILURE"},
{DATE: "2017-08-18", COUNT: "63", EVENT_NAME: "FRAUD_NOT_DONE"},
{DATE: "2017-08-18", COUNT: "4451", EVENT_NAME: "FRAUD_ACCEPT"},
];
let order = 'descending';
let all_are_numbers = are_all_numbers(data, 'COUNT');
console.log('all_are_numbers:');
console.log(all_are_numbers);
if (all_are_numbers) {
var orderByResults = orderBy(
data,
[item => parseInt(item.COUNT)],
['desc']
);
} else {
var orderByResults = orderBy(
data,
prop,
order === 'descending' ? 'desc' : 'asc'
);
}
console.log(orderByResults);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>

最新更新