Skip to content

Commit 23f7e52

Browse files
committed
optimize: grouped usage of new Set
1 parent 757e3f7 commit 23f7e52

File tree

2 files changed

+45
-16
lines changed

2 files changed

+45
-16
lines changed

lib/entity/data.js

+33-14
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,23 @@ export class Data {
2929
init() {
3030
this._getAttributesVariables()
3131
this._getEventVariables()
32+
this._removeDuplicateVariables()
3233
this._initVariables()
3334
}
3435

3536
initAttributeVariables(attr) {
3637
const expr = this.entity.element.getAttribute(attr)
3738
if (!expr) return
3839

40+
const variables = this.getAttributeVariables()
41+
42+
if (variables.length) {
43+
variables.forEach((variable) => {
44+
this.remove(variable, attr)
45+
})
46+
this._attributes.set(attr, [])
47+
}
48+
3949
if (attr === 'each') {
4050
const [_, variable] = expr.split(' in ')
4151

@@ -85,21 +95,32 @@ export class Data {
8595
})
8696
}
8797

98+
_removeDuplicateVariables() {
99+
this._variables.forEach((attributes, variable) => {
100+
this._variables.set(variable, [...new Set(attributes)])
101+
})
102+
103+
this._attributes.forEach((variables, attribute) => {
104+
this._attributes.set(attribute, [...new Set(variables)])
105+
})
106+
}
107+
88108
_initVariables() {
89109
const entityID = this.entity.id
110+
const state = this.entity.base.state
90111

91112
this.variables.forEach((variable) => {
92113
if (State.isElState(variable)) {
93114
this.entity.setAsGroup()
94115

95116
if (window[entityID] == null)
96-
window[entityID] = this.entity.base.state.create({}, entityID)
117+
window[entityID] = state.create({}, entityID)
97118

98-
this.entity.base.state.addVariable(entityID, entityID)
119+
state.addVariable(entityID, entityID)
99120

100121
if (variable !== State.EL_STATE) {
101122
const [_, varName] = variable.split('.')
102-
this.entity.base.state.addEntityVariable(entityID, varName, entityID)
123+
state.addEntityVariable(entityID, varName, entityID)
103124
}
104125
} else if (State.isGroupState(variable)) {
105126
if (this.entity.group == null)
@@ -112,39 +133,37 @@ export class Data {
112133
const groupID = this.entity.group?.id
113134

114135
if (window[groupID] == null) {
115-
window[groupID] = this.entity.base.state.create({}, groupID)
136+
window[groupID] = state.create({}, groupID)
116137
}
117138

118-
this.entity.base.state.addVariable(groupID, entityID)
139+
state.addVariable(groupID, entityID)
119140

120141
if (variable !== State.GROUP_STATE) {
121142
const [_, varName] = variable.split('.')
122-
this.entity.base.state.addEntityVariable(groupID, varName, entityID)
143+
state.addEntityVariable(groupID, varName, entityID)
123144
}
124145
} else if (typeof window[variable] === 'function') {
125146
this.deleteVariable(variable)
126147
} else {
127148
try {
128149
const [identifier] = variable.split('.')
129-
window[identifier] = this.entity.base.state.getState(identifier)
130-
this.entity.base.state.addVariable(identifier, entityID)
150+
window[identifier] = state.getState(identifier)
151+
state.addVariable(identifier, entityID)
131152
} catch (error) {
132153
console.error('Failed to initialize variable:', variable, error)
133154
}
134155
}
135156
})
157+
158+
state.removeDuplicateVariables()
136159
}
137160

138161
add(variable, attribute) {
139162
const currentAttributes = this._variables.get(variable) ?? []
140-
this._variables.set(variable, [
141-
...new Set(currentAttributes.concat([attribute])),
142-
])
163+
this._variables.set(variable, [...currentAttributes, attribute])
143164

144165
const currentVariables = this._attributes.get(attribute) ?? []
145-
this._attributes.set(attribute, [
146-
...new Set(currentVariables.concat([variable])),
147-
])
166+
this._attributes.set(attribute, [...currentVariables, variable])
148167
}
149168

150169
remove(variable, attributes) {

lib/state.js

+12-2
Original file line numberDiff line numberDiff line change
@@ -79,13 +79,23 @@ export class State {
7979

8080
addVariable(variable, entityID) {
8181
const variables = this.variables.get(variable) || []
82-
this.variables.set(variable, [...new Set(variables), entityID])
82+
this.variables.set(variable, [...variables, entityID])
8383
}
8484

8585
addEntityVariable(groupID, variable, entityID) {
8686
const key = `${groupID}.${variable}`
8787
const variables = this.entityVariables.get(key) || []
88-
this.entityVariables.set(key, [...new Set(variables), entityID])
88+
this.entityVariables.set(key, [...variables, entityID])
89+
}
90+
91+
removeDuplicateVariables() {
92+
this.variables.forEach((entityIDs, variable) => {
93+
this.variables.set(variable, [...new Set(entityIDs)])
94+
})
95+
96+
this.entityVariables.forEach((entityIDs, variable) => {
97+
this.entityVariables.set(variable, [...new Set(entityIDs)])
98+
})
8999
}
90100

91101
create(object, entityID = null) {

0 commit comments

Comments
 (0)