Skip to content

Commit

Permalink
Added support for circular objects in forEach; solves issue #28.
Browse files Browse the repository at this point in the history
  • Loading branch information
Jonas Höglund committed Oct 27, 2011
1 parent f9673ba commit 6e0406f
Showing 1 changed file with 13 additions and 4 deletions.
17 changes: 13 additions & 4 deletions src/jsonselect.js
Expand Up @@ -480,11 +480,17 @@
return [m, sels];
}

function forEach(sel, obj, fun, id, num, tot) {
function forEach(sel, obj, fun, id, num, tot, traversed) {
var a = (sel[0] === ",") ? sel.slice(1) : [sel],
a0 = [],
call = false,
i = 0, j = 0, k, x;

if (!traversed) {
traversed = [];
}
traversed.push(obj);

for (i = 0; i < a.length; i++) {
x = mn(obj, a[i], id, num, tot);
if (x[0]) {
Expand All @@ -500,12 +506,14 @@
}
if (isArray(obj)) {
for (i = 0; i < obj.length; i++) {
forEach(a0, obj[i], fun, undefined, i, obj.length);
if (!~traversed.indexOf(obj[i])) {
forEach(a0, obj[i], fun, undefined, i, obj.length, traversed);
}
}
} else {
for (k in obj) {
if (obj.hasOwnProperty(k)) {
forEach(a0, obj[k], fun, k);
if (obj.hasOwnProperty(k) && !~traversed.indexOf(obj[k])) {
forEach(a0, obj[k], fun, k, undefined, undefined, traversed);
}
}
}
Expand Down Expand Up @@ -545,3 +553,4 @@
};
exports.compile = compile;
})(typeof exports === "undefined" ? (window.JSONSelect = {}) : exports);

0 comments on commit 6e0406f

Please sign in to comment.