Array.filter()

2010.03.16. 21:46 stack

if (typeof Array.prototype.filter === 'undefined') {
    Array.prototype.filter = function (fn, scope) {
        var result = [];
        for (var i = 0; i < this.length; i++) {
            if (fn.call(scope, this[i], i, this)) {
                result.push(this[i]);
            }
        }
        return result;
    };
}

var array = [1, 2, 3, 4];
alert(array.filter(function (n) {return n > 2;})); // [3, 4]

Szólj hozzá!

Címkék: array filter

tömb rendezés + összehasonlítások száma

2009.12.05. 10:18 stack

Az elmúlt hetekben több helyen is találkoztam ehhez hasonló mintakóddal, mivel az eredményeken jót mosolyogtam, gondoltam én is kiteszem. Nagy jelentősége persze nincsen, csupán érdekesség.

Adott egy 1000 elemű tömb, benne az elemek növekvő sorrendben. Vajon az egyes böngészők hány összehasonlítást használnak rendezés közben?

var list = [];
for (var i = 0; i < 1000; i++) {
    list.push(i);
}
var count = 0;

list.sort(function(a, b){
    ++count;
    if (a < b) {
        return -1;
    }
    if (a > b) {
        return 1;
    }
    return 0;
});

alert(count);

Az eredmények:

Szólj hozzá!

Címkék: array sort nem extjs

Array.indexOf - IE vs. FF

2009.11.15. 09:45 stack

A JavaScript keretrendszerek egyik nagy előnye, hogy a fejlesztőket megkímélik a különböző böngészők sajátosságaitól. Szerintem ez az Ext JS-re különösen igaz. Mégis, minap egy furcsa hibába ütköztem:

var a = ['0', '1', '2'];
alert(a.indexOf(1));

Míg Firefox a natív függvényt használja, addig az IE az ExtJS-ben definiáltat. Az elsőben van típusellenőrzés, míg a másodikban nincsen.

Szólj hozzá!

Címkék: array indexof

JSON + [undefined]

2009.09.16. 19:01 stack

Nagyon közhely: rossz kódban, rossz hibák vannak, és rossz azokat keresni! :)

PHP-ban valamiért összekeveredik a lista és az asszociatív tömb, talán emiatt is sokszor JavaScriptben is találni olyan példákat, hogy egy elem tulajdonságai nem Object-ben, hanem Array-ban vannak. (előre meghatározott sorrendben). Azontúl, hogy nagyon kerülendő ez a megoldás, még komoly hibaforrás is lehet, ha valamelyik tulajdonság undefined is lehet, majd mindezt valamiért JSON-nal el akarnánk kódolni.

var a = [undefined, 'Hello világ!', 100];
var b = Ext.util.JSON.decode(Ext.util.JSON.encode(a));
alert('a: ' + a.length + '; b: ' + b.length);

Eredmény: "a: 3; b:2". és ugye azt mondani sem kell, hogy az indexek eggyel elcsúsztak... Meg lehetne hack-elni az encode-t, hogy készüljön fel erre az extrém esetre, de jobb inkább ezt az egészet elkerülni...

Szólj hozzá!

Címkék: array json undefined

Array.unique()

2009.06.15. 21:26 stack

csak úgy, mert hasznos...

Array.prototype.has = function(v) {
    for(var i = this.length; i;) {
        if (this[--i] === v) {
            return true;
        }
    }
    return false;
};

Array.prototype.unique = function() {
    var a = [];
    for(var i = this.length; i;) {
        if (!a.has(this[--i])) {
            a.push(this[i]);
        }
    }
    return a;
};

UPDATE: az eredeti script közel kétszer annyi futási idővel dolgozott, ezért le lett cserélve...

14 komment

Címkék: array unique nem extjs

Array.shuffle()

2009.04.27. 22:57 stack

Tömb elemeinek összekeverése:

Array.prototype.shuffle = function() {
    var r = [];
    while (this.length) {
        r.push(this.splice(Math.round(Math.random() * this.length - 1), 1));
    }
    return r;
};

Szólj hozzá!

Címkék: array shuffle nem extjs

Tömbé alakítás

2008.10.18. 10:22 stack

Az ExtJS forráskódját vizsgálva egy számomra új és érdekes ötletre bukkantam.

Ha pl. egy függvény bejövő paraméterének megengedem, hogy akár egy elemet, akár listában több elemet tartalmazzon, akkor ezt az értéket a következő kóddal alakíthatom tömbbé:

if (!Ext.isArray(A)) {
    A = [A];
}

Ezzel szemben ugyanezt a hatást érhetjük el azzal is, ha a bejövő értéket hozzáfűzzük egy üres tömbhöz:

A = [].concat(A);

Szubjektív vélemény, de szerintem szebb az utóbbi. :)

Szólj hozzá!

Címkék: array

ExtJS blog, mi ez?

Az ExtJS egy JavaScript keretrendszer, melyet a blog írója elfogultan a legjobbnak tart, és ez a blog olyan apróságok gyűjteménye, melyek ExtJS használata közben felmerültek, eszébe jutottak...

Címkék

ajax (2) alignto (1) analytics (1) anchorto (1) array (7) auto (1) back button (1) beautifier (1) benchmark (1) button (1) capture (1) case sensitive (1) center (1) change (1) class (2) closure compiler (1) combobox (3) comment (1) contextmenu (2) core (1) count (1) css (8) dataview (1) date (1) datefield (1) dragdrop (1) easing (1) eclipse (1) element (1) eval (2) event (1) field (2) filter (1) firefox extension (2) focus (2) function (1) google (2) grid (3) group contact (1) header (2) height (2) hidden (1) hirek (1) history (1) htaccess (1) https (1) icon (3) id (1) ie6 (1) iframe (2) image (1) indexof (1) jslint (1) jsmin (1) json (5) keymap (1) kipróbálom (2) label (1) layout (1) magyar (1) mask (1) math (1) maxlength (1) mysql (5) napi szívás (7) nem extjs (10) node (1) off (3) override (15) pagesize (1) pagining (1) panel (2) php (3) plugin (1) pozicionálás (2) preload (1) print (1) propertygrid (1) readonly (2) record (1) replace (1) scale (1) shuffle (1) sort (2) sortable (1) store (2) string (5) sum (1) tabchange (1) tabpanel (1) template (1) textfield (1) textitem (1) timer (1) toolbar (5) tools (1) total count (1) tree (1) treenode (1) truncate (1) ucfirst (1) undefined (1) unique (1) urlencode (1) utf8 (1) viewer (1) viewport (2) window (1) zindex (1)