【问题标题】:Sort by converted item in Lodash orderBy without changing it在 Lodash orderBy 中按转换后的项目排序而不更改它
【发布时间】:2017-08-18 20:47:49
【问题描述】:

我有类似的数据

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 : how to do a case insensitive sorting on a collection using 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排序?

【问题讨论】:

    标签: javascript node.js lodash


    【解决方案1】:

    您应该告诉 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>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-14
      • 1970-01-01
      • 2018-07-02
      • 1970-01-01
      • 2015-08-09
      • 2013-03-06
      • 1970-01-01
      相关资源
      最近更新 更多