Практически все, что вы можете придумать с помощью доморощенной функции карты (нативная .map
не повторяется, а jQuery.map
- просто полные ошибки)
Создание диапазонов:
//1-20
map( Array( 20 ), function( v,i ){
return i+1;
});
//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
//-50 - 0
map( Array( 51 ), function( v,i ){
return i-50;
});
//[-50, -49, -48, -47, -46, -45, -44, -43, -42, -41, -40, -39, -38, -37, -36, -35, -34, -33, -32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0]
В общем, вместо того, чтобы делать:
var a = [],
l = 10;
while ( l-- ) {
a.unshift(
(function(l){
return function() {
alert( l );
};
})( l )
);
}
Вы можете сделать это:
var a = map( Array( 10 ), function ( v, i ) {
return function(){
alert( i );
};
});
Обратите внимание, что это относится только к jQuery.map
или shimmed .map
, родной .map
не выполняет итерации массива.
Если вы не используете jQuery (который сглаживает результат :(), вы можете создать трехмерные массивы следующим образом:
var xyz = map(Array(10), function (v, i) {
return map(Array(10), function (v, j) {
return map(Array(10), function (v, k) {
return i * 100 + j * 10 + k;
});
});
});
xyz[0][0][0] // 0
xyz[9][9][9] // 999
xyz[4][4][4] // 444
xyz[3][5][8] // 358
Из которых эквивалентЦиклы for довольно ужасны: P
Быстрая реализация функции карты для полноты:
function map( elems, callback ){
var i, length = elems.length, ret = [];
for ( i = 0; i < length; i++ ) {
value = callback( elems[ i ], i );
ret[ ret.length ] = value;
}
return ret;
}