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/
JavaScript
The World's Most Misunderstood Programming Language
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; };
Subskrybuj:
Posty (Atom)