wb-table/js/lib/core.js

101 lines
1.8 KiB
JavaScript

if (!String.prototype.size) {
Object.defineProperty(String.prototype, 'size', {
get() {
var n = 0
for (let it of this) {
n++
}
return n
}
})
Object.defineProperty(String.prototype, 'at16', {
value(n) {
var tmp = []
for (let it of this) {
tmp.push(it)
}
return tmp[n]
}
})
}
export class Enum {
#dict_k = Object.create(null)
#dict_v = Object.create(null)
length = 0
constructor(obj = {}) {
for (let k in obj) {
this.add(k, obj[k])
}
}
add(k, v) {
if (this.#dict_k[k]) {
var _v = this.#dict_k[k]
for (let t of _v) {
this.#dict_v[t] = this.#dict_v[t].filter(i => i !== k)
}
} else {
this.#dict_k[k] = Array.isArray(v) ? v : [v]
this.length++
}
if (Array.isArray(v)) {
for (let t of v) {
if (this.#dict_v[t]) {
this.#dict_v[t].push(k)
} else {
this.#dict_v[t] = [k]
}
}
} else {
this.#dict_v[v] = [k]
}
}
remove(k) {
var v = this.#dict_k[k]
if (v) {
delete this.#dict_k[k]
for (let t of v) {
delete this.#dict_v[t]
}
this.length--
}
}
get(k) {
if (this.#dict_k[k]) {
return this.#dict_k[k]
} else if (this.#dict_v[k]) {
return this.#dict_v[k]
}
}
forEach(callback, forV) {
var dict = forV ? this.#dict_v : this.#dict_k
for (let k in dict) {
if (callback(k, dict[k]) === false) {
break
}
}
return this
}
toString(forV) {
var dict = forV ? this.#dict_v : this.#dict_k
var text = ''
for (let k in dict) {
text += `${k} ${dict[k].join(' ')}\n`
}
return text.trim()
}
toJson(forV) {
return JSON.stringify(forV ? this.#dict_v : this.#dict_k)
}
}
五笔词库生成器
JavaScript 53.5%
Vue 45.1%
HTML 1.4%