Created
May 15, 2009 20:23
-
-
Save aulizko/112417 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // пусть ArrayUtils - это специальная утилита для работы с массивами, | |
| // реализующая for…each, map/reduce для всех браузеров, включая ie6. | |
| // Что-то наподобие YUI.Array | |
| var A = window.ArrayUtils = { | |
| map : (Array.prototype.map) ? | |
| function (a, fn, c) { | |
| return a.map(fn, c || window); | |
| } : | |
| function (a, fn, c) { | |
| var result = [], i = a.length; | |
| while(i--) { | |
| result[i] = fn.call(c || window, a[i]); | |
| } | |
| return result; | |
| }, | |
| filter : (Array.prototype.filter) ? | |
| function (a, fn, c) { | |
| return a.filter(fn, c || window); | |
| } : | |
| function (a, func, c) { | |
| var result = [], i = a.length; | |
| while(i--) { | |
| if (i in a && fn.call(c || window, a[i], i, a)) result.push(a[i]); | |
| } | |
| return result; | |
| } | |
| }; | |
| // получим новый массив, получаемый из исходного путем умножения каждого элемента на два. | |
| // уже немножко "weird", не так ли? | |
| var data = [1, 2, 3, 4]; | |
| A.map(data, function (item) { return item * 2; }); // 2, 4, 6, 8 | |
| // а теперь пример повеселее: | |
| var persons = [ | |
| { | |
| name : 'John', | |
| lastName : 'Doe', | |
| address : 'California, Los Angeles' | |
| }, | |
| { | |
| name : 'Ivan', | |
| lastName : 'Ivanov', | |
| address : 'Moscow' | |
| }, | |
| { | |
| name : 'Abraham', | |
| lastName : 'Smith', | |
| address : 'California, San Francisco' | |
| } | |
| ]; | |
| // Получим массив, состоящий только из полных имен пользователей, проживающих в калифорнии | |
| var townRegex = /california/i; | |
| A.map(A.filter(persons, function (person) { | |
| return townRegex.test(person.address); | |
| }), function (person) { | |
| return person.name + ' ' + person.lastName; | |
| }); // John Doe, Abraham Smith |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment