-
Notifications
You must be signed in to change notification settings - Fork 739
Expand file tree
/
Copy patharray.js
More file actions
59 lines (52 loc) · 1.07 KB
/
array.js
File metadata and controls
59 lines (52 loc) · 1.07 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
const IndexedArray = new Proxy(Array, {
construct: function (target, [originalArray]) {
const index = {}
originalArray.forEach(function (item) {
index[item.id] = item
})
const newArray = new target(...originalArray)
return new Proxy(newArray, {
get: function (target, name) {
if (name === 'push') {
return function (item) {
index[item.id] = item
return target[name].call(target, item)
}
} else if (name === 'findById') {
return function (searchId) {
return index[searchId]
}
}
return target[name]
}
})
}
})
const bears = new IndexedArray([
{
id: 2,
name: 'grizzly',
},
{
id: 4,
name: 'black',
},
{
id: 3,
name: 'polar',
},
])
bears.push({
id: 55,
name: 'brown'
})
const brown = bears.findById(55)
console.log(brown)
console.log(bears.findById(3))
// const index = {}
// bears.forEach(function (bear) {
// index[bear.id] = bear
// })
//
// const polar = index[3]
// const black = index[4]