feat: at_least, at_most, sort_naturual for #132

This commit is contained in:
harttle
2019-07-05 12:09:00 +08:00
parent 570400ebcc
commit e6f5f1cd85
2 changed files with 81 additions and 0 deletions
+25
View File
@@ -1,5 +1,9 @@
const toLowerCase = String.prototype.toLowerCase
export default {
'abs': (v: number) => Math.abs(v),
'at_least': (v: number, n: number) => Math.max(v, n),
'at_most': (v: number, n: number) => Math.min(v, n),
'ceil': (v: number) => Math.ceil(v),
'divided_by': (v: number, arg: number) => v / arg,
'floor': (v: number) => Math.floor(v),
@@ -10,5 +14,26 @@ export default {
return Math.round(v * amp) / amp
},
'plus': (v: number, arg: number) => Number(v) + Number(arg),
'sort_natural': sortNatural,
'times': (v: number, arg: number) => v * arg
}
function caseInsensitiveCmp (a, b) {
if (!b) return -1
if (!a) return 1
a = toLowerCase.call(a)
b = toLowerCase.call(b)
if (a < b) return -1
if (a > b) return 1
return 0
}
function sortNatural (input: any[], property?: string) {
if (!input || !input.sort) return []
if (property !== undefined) {
return [...input].sort(
(lhs, rhs) => caseInsensitiveCmp(lhs[property], rhs[property])
)
}
return [...input].sort(caseInsensitiveCmp)
}