var getProperty = function(obj, propertySrc) { var src = propertySrc.split('.'); var res = obj; for (var i = 0, l = src.length; i < l; ++i) { if (!(src[i] in res)) { return void(0); } res = res[src[i]]; } return res; };Working example: http://jsfiddle.net/gkucmierz/5Df5D/
poniedziałek, 30 czerwca 2014
get nested property of object
Function that allows to get nested property of object. If it is not defined, function will return undefined.
niedziela, 23 lutego 2014
sort - stabilność sortowania
Kod JavaScript, którym można sprawdzić czy zaimplementowany algorytm sortowania jest stabilny czy nie.
Przykład jsfiddle: http://jsfiddle.net/gkucmierz/WWGa8/1/
var a = [ {n: 1, str: 'first'}, {n: 2, str: 'stable check 1'}, {n: 2, str: 'stable check 2'}, {n: 3, str: 'last'} ]; a.sort(function(a, b) { return a.n - b.n; });
Przykład jsfiddle: http://jsfiddle.net/gkucmierz/WWGa8/1/
wtorek, 28 stycznia 2014
recursiveEach
recursiveEach - rekursywna iteracja po obiekcie. Funkcja do prawidłowego działania wymaga również 2 innych funkcji znajdujących się na tym blogu: getType oraz each.
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.
Przy pomocy tej funkcji łatwo zaimplementować funkcję flatten. Do funkcji flatten można przekazać zarówno obiekt jak i tablicę.
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; };
środa, 22 stycznia 2014
asyncMap - asynchroniczne iterowanie po tablicy
Funkcja pozwalająca na iterację po tablicy w sposób asynchroniczny. Można dzięki niej w genialnie prosty sposób wykonać np. kolejkę zadań, które wymagają wykonania asynchronicznych akcji np. zapytanie do innego serwera.
var asyncMap = function(arr, fn, endFn) { var i = 0, len = arr.length, res = []; (function callee() { fn(arr[i], i, function(singleRes) { res.push(singleRes); if (++i < len) { callee(); } else { endFn(res); } }, arr); })(); };prosty przykład użycia: http://jsfiddle.net/gkucmierz/QzLP5/
Subskrybuj:
Posty (Atom)