Funkcję można dodatkowo rozbudować. Np. idealnie byłoby, gdyby w docelowej funkcji zamiast samej wartości klucza zwracała tablicę stringów wskazujących na ścieżkę do tego klucza w głównym obiekcie.
var recursiveEach = function recur(obj, fn, depth) { if (typeof depth === 'undefined') depth = -1; var res = {}; if (getType(obj) === 'Object' && depth !== 0) { each(obj, function (el, key) { res[key] = recur(el, fn, depth - 1); }); return res; } return fn(obj); };
var getType = function (obj) { return ({}).toString.call(obj).slice(8, -1); }; var each = function (obj, fn) { var res = {}; for (var i in obj) { if (obj.hasOwnProperty(i)) { res[i] = fn.call(obj, obj[i], i); } } return res; };
Przy pomocy tej funkcji łatwo zaimplementować funkcję flatten. Do funkcji flatten można przekazać zarówno obiekt jak i tablicę.
var flatten = function(obj) { var res = []; recursiveEach(obj, function(val) { res.push(val); }); return res; };
Brak komentarzy:
Prześlij komentarz