Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

表ソートをv1互換にする #578

Merged
merged 1 commit into from
Sep 12, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 28 additions & 3 deletions src/plugin_system.js
Original file line number Diff line number Diff line change
Expand Up @@ -1378,11 +1378,36 @@ const PluginSystem = {
}
},
// @二次元配列処理
'表ソート': { // @配列Aの列番号B(0起点)(あるいはキー名)をキーにしてソートする。Aの内容を書き換える。 // @ひょうそーと
'表ソート': { // @二次元配列AでB列目(0起点)(あるいはキー名)をキーに文字列順にソートする。Aの内容を書き換える。 // @ひょうそーと
type: 'func',
josi: [['の'],['を']],
josi: [['の'], ['を']],
fn: function (a, no) {
if (!a instanceof Array) {
throw new Error('『表ソート』には配列を指定する必要があります。')
}
a.sort((n, m) => {
const ns = n[no]
const ms = m[no]

if (ns === ms) {
return 0
} else if (ns < ms) {
return -1
} else {
return 1
}
})
return a
}
},
// @二次元配列処理
'表数値ソート': { // @二次元配列AでB列目(0起点)(あるいはキー名)をキーに数値順にソートする。Aの内容を書き換える。 // @ひょうすうちそーと
type: 'func',
josi: [['の'], ['を']],
fn: function (a, no) {
if (!a instanceof Array) { throw new Error('『表ソート』には配列を指定する必要があります。') }
if (!a instanceof Array) {
throw new Error('『表数値ソート』には配列を指定する必要があります。')
}
a.sort((n, m) => {
const ns = n[no]
const ms = m[no]
Expand Down
11 changes: 8 additions & 3 deletions test/plugin_system_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -169,9 +169,14 @@ describe('plugin_system_test', () => {
cmp('[2,1,3]の配列最小値を表示', '1')
})
it('表ソート', () => {
cmp('A=[[4,4,4],[2,2,2],[5,5,5]];Aの1を表ソート。AをJSONエンコードして表示。', '[[2,2,2],[4,4,4],[5,5,5]]')
cmp('A=[[1,4,4],[2,2,2],[3,5,5]];Aの1を表ソート。AをJSONエンコードして表示。', '[[2,2,2],[1,4,4],[3,5,5]]')
cmp('A=[{n:11},{n:9},{n:13}];Aの"n"を表ソート。AをJSONエンコードして表示。', '[{"n":9},{"n":11},{"n":13}]')
cmp('A=[[4,4,"b"],[2,2,"a"],[5,5,"c"]];Aの2を表ソート。AをJSONエンコードして表示。', '[[2,2,"a"],[4,4,"b"],[5,5,"c"]]')
cmp('A=[[1,"12",4],[2,"1",2],[3,"2",5]];Aの1を表ソート。AをJSONエンコードして表示。', '[[2,"1",2],[1,"12",4],[3,"2",5]]')
cmp('A=[{n:"b"},{n:"a"},{n:"c"}];Aの"n"を表ソート。AをJSONエンコードして表示。', '[{"n":"a"},{"n":"b"},{"n":"c"}]')
})
it('表数値ソート', () => {
cmp('A=[[4,4,4],[2,2,2],[5,5,5]];Aの1を表数値ソート。AをJSONエンコードして表示。', '[[2,2,2],[4,4,4],[5,5,5]]')
cmp('A=[[1,4,4],[2,2,2],[3,5,5]];Aの1を表数値ソート。AをJSONエンコードして表示。', '[[2,2,2],[1,4,4],[3,5,5]]')
cmp('A=[{n:11},{n:9},{n:13}];Aの"n"を表数値ソート。AをJSONエンコードして表示。', '[{"n":9},{"n":11},{"n":13}]')
})
it('表ピックアップ', () => {
cmp('A=[["赤",1],["青",2],["緑",3]];Aの0から「赤」を表ピックアップしてJSONエンコードして表示。', '[["赤",1]]')
Expand Down