This repository was archived by the owner on Feb 16, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
72 lines (66 loc) · 1.8 KB
/
index.js
File metadata and controls
72 lines (66 loc) · 1.8 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
// @flow
export function mergeObject<T: Object>(obj: T, fields: $Shape<T>): T {
const ret = Object.assign({}, obj)
let changed = false
for (const k in fields) {
if (fields.hasOwnProperty(k)) {
const value = fields[k]
changed = changed || obj[k] !== value
ret[k] = value
}
}
return changed ? ret : obj
}
export function mergeArray<T>(arr: Array<T>, indexes: Array<number>, values: Array<T>): Array<T> {
const ret = arr.slice()
let changed = false
for (let i = 0, len = values.length; i < len; i++) {
const index = indexes[i]
const value = values[i]
changed = changed || arr[index] !== value
ret[index] = value
}
return changed ? ret : arr
}
export function swapArray<T>(arr: Array<T>, from: number, to: number): Array<T> {
if (from === to) {
return arr
}
return mergeArray(arr, [from, to], [arr[to], arr[from]])
}
export type Splice<T> = {
start: number,
deleteCount: number,
items?: Array<T>
};
export function spliceArray<T>(arr: Array<T>, splices: Array<Splice<T>>) {
const len = splices.length
if (len === 0) {
return arr
}
const ret = arr.slice()
for (let i = 0; i < len; i++) {
const { start, deleteCount, items = [] } = splices[i]
ret.splice(start, deleteCount, ...items)
}
return ret
}
export function mergeDictionary<K, V>(dict: {[key: K]: V}, fields: {[key: K]: V}): {[key: K]: V} {
return mergeObject(dict, fields)
}
export function removeDictionary<K, V>(dict: {[key: K]: V}, keys: Array<K>): {[key: K]: V} {
const len = keys.length
if (len === 0) {
return dict
}
const ret: {[key: K]: V} = Object.assign({}, dict)
let changed = false
for (let i = 0; i < len; i++) {
const k = keys[i]
if (ret.hasOwnProperty(k)) {
delete ret[k]
changed = true
}
}
return changed ? ret : dict
}