LoginSignup
0
1

More than 1 year has passed since last update.

Grid.jsで単位ありのsortがしたい。

Posted at

経緯

Grid.jsのsortオプションでは、以下の関数が動いている

if (a > b) {
  return 1;
} else if (b > a) {
  return -1;
} else {
  return 0;
}

しかし、これだと200円10個といった単位付きでの比較はできない。
表示されるDataを変更するオプションは存在するが、a,bには変更後のデータが格納されてしまうため、そこから数値のみを取り出して比較していく。

単位付きのままsortをかけてみる

ソースコードは画像の下にあります。
chrome-capture.gif

index.js

<Grid
  data={[
    {id: '001', fruite: 'りんご', price: 200, sum: 20},
    {id: '002', fruite: 'バナナ', price: 150, sum: 10},
    {id: '003', fruite: 'ぶどう', price: 800, sum: 3},
    {id: '004', fruite: 'メロン', price: 2000, sum: 1},
  ]}
  columns={[
    { 
        id: 'id', 
        name: 'ID' 
    }, 
    { 
        id: 'fruite', 
        name: 'フルーツ', 
        sort: false, 
    }, 
    { 
        id: 'price',
        name: '価格',
        data: (row)=> row.price + '',
    },    
    {
        id: 'sum',
        name: '個数',
        data: (row)=> row.sum + '',
    }, 
  ]}
  sort={true}
  search={true}
/>

数値のみを取り出してsortをかける

index.js

<Grid
  data={[
    {id: '001', fruite: 'りんご', price: 200, sum: 20},
    {id: '002', fruite: 'バナナ', price: 150, sum: 10},
    {id: '003', fruite: 'ぶどう', price: 800, sum: 3},
    {id: '004', fruite: 'メロン', price: 2000, sum: 1},
  ]}
  columns={[
    { 
        id: 'id', 
        name: 'ID' 
    }, 
    { 
        id: 'fruite', 
        name: 'フルーツ', 
        sort: false, 
    }, 
    { 
        id: 'price',
        name: '価格',
        data: (row)=> row.price + '',
        sort: {
          compare: (a,b) => {
            // a,bから数値のみを取り出す正規表現
       // 結果を比較して1, -1, 0のいずれかを返す
          }
        }
    },    
    {
        id: 'sum',
        name: '個数',
        data: (row)=> row.sum + '',
     sort: {
          compare: (a,b) => {
            // a,bから数値のみを取り出す正規表現
       // 結果を比較して1, -1, 0のいずれかを返す
          }
        }
    }, 
  ]}
  sort={true}
  search={true}
/>

うまくいくと

こうなります。
chrome-capture (1).gif

0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1