Skip to content

Commit e59b301

Browse files
committed
use Set in deep traverse
1 parent e314db1 commit e59b301

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

src/watcher.js

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -334,25 +334,29 @@ Watcher.prototype.teardown = function () {
334334
* @param {*} val
335335
*/
336336

337-
function traverse (val, walkedObjs) {
337+
const seenObjects = new Set()
338+
function traverse (val, seen) {
338339
var i, keys
339340

340-
walkedObjs = walkedObjs || {}
341+
if (!seen) {
342+
seen = seenObjects
343+
seen.clear()
344+
}
341345
if (isArray(val)) {
342346
i = val.length
343-
while (i--) traverse(val[i], walkedObjs)
347+
while (i--) traverse(val[i], seen)
344348
} else if (isObject(val)) {
345349
if (val.__ob__) {
346350
var depId = val.__ob__.dep.id
347-
if (walkedObjs[depId]) {
351+
if (seen.has(depId)) {
348352
return
349353
} else {
350-
walkedObjs[depId] = true
354+
seen.add(depId)
351355
}
352356
}
353357

354358
keys = Object.keys(val)
355359
i = keys.length
356-
while (i--) traverse(val[keys[i]], walkedObjs)
360+
while (i--) traverse(val[keys[i]], seen)
357361
}
358362
}

0 commit comments

Comments
 (0)