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:
Komentarze (Atom)