-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patharray.js
More file actions
90 lines (89 loc) · 2.22 KB
/
array.js
File metadata and controls
90 lines (89 loc) · 2.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
module.exports = {
lc() {
return this.map(o => o.lc())
},
uc() {
return this.map(o => o.uc())
},
unique() {
return this.filter((e, pos) => this.indexOf(e) == pos)
},
trim(nonempty = false) {
var ret = this
if (nonempty) ret = ret.filter(s => !!s)
return ret.map(s => typeof s == 'string' ? s.trim() : s)
},
flat(depth = 1) {
var r = (ret, v) => ret.concat(Array.isArray(v) && depth > 0 ? v.flat(depth - 1) : v)
return this.reduce(r, [])
},
last(n = 0) {
return this[this.length - (n + 1)]
},
unpack() {
var l = this.length
return l == 1 ? this[0]
: l == 0 && arguments.length > 0
? undefined
: this
},
keyval(key = 'k', val = 'v') {
var r = (acc, v) => {
propadd(acc, v[key], v[val]); return acc
}
return this.reduce(r, {})
},
indexOfObj(filter) {
var ret = -1
this.some((o,i) => {
if (filter(o)) ret = i
})
return ret
},
json() {
return JSON.stringify(this)
},
item(key, val) {
if ((key || val) == undefined) return
var r = this.filter(o => {
var v = o[key]
if (val instanceof RegExp) {
if (typeof v != 'string') v = v.toString()
return v.match(val)
}
else
return v == val
})
return r[0]
},
contains(v) {
return this.indexOf(v) > -1
},
split(n) {
if (!n) return this
var ret = []
for (var i = 0; i < this.length; i++) {
let j = Math.floor(i / n)
if (!ret[j]) ret[j] = []
ret[j].push(this[i])
}
return ret
},
dict(nms) {
var i = 0
if (nms.isStr) nms = nms.arr()
var fn = (o, v) => (o[nms[i++] || i] = v, o)
var n = nms.length
if (nms[n-1] == '*') {
n = this.length; nms.pop()
}
return this.slice(0, n).reduce(fn, {})
}
}
function propadd(o, k, v) {
if (k in o) {
if (Array.isArray(o[k])) o[k].push(v)
else o[k] = [o[k], v]
}
else o[k] = v
}