-
Notifications
You must be signed in to change notification settings - Fork 0
/
perf_mutation.js
38 lines (38 loc) · 1003 Bytes
/
perf_mutation.js
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
import { mutationBuilder, _advancedQueryBuilder } from './index.js'
const people = [
{ name: 'Jesse', age: 13 },
{ name: 'John', age: 10 }
]
const f = mutationBuilder('$.*')
f(people, i => { i.age = (i.age || 0) + 1; return i })
function createRemover (query) {
const f = _advancedQueryBuilder(query, { parent: true })
return function () {
const result = f(...arguments)
for (const [item, arr] of result) {
const index = arr.indexOf(item)
arr.splice(index, 1)
}
return arguments[0]
}
}
const g = createRemover('$.[?(@.age > $)]')
console.log(people)
console.log(g(people, 13))
const store = {}
function push (query, item) {
const f = mutationBuilder(query)
return f(store, i => {
i.push(item)
return i
})
}
function set (query, item) {
const f = mutationBuilder(query)
f(store, item)
}
set('$.names', i => i || [])
push('$.names', { name: 'Jesse' })
console.log(store)
set('$.names.*.name', i => i.split('').reverse().join(''))
console.log(store)