我有以下代码
$.map( [ 0, 1, 2 ], function( n ) {
return n > 0 ? n + 1 : null;
});
Out Put:[2,3]
我知道$.map
Translate all items in an array or object to new array of items.
(Documentation)
我想知道call back function
中的.map
如何运作(内部实施)?
一个可能的答案可能是
.map
有一些循环将数组的每个元素传递给call back method
,返回一些值。.map
管理call back method
的每个值返回。在这种情况下,推入一些内部数组。 .map
返回数组
的修改 但我不确定它是如何工作的,它是否像我解释的那样有效?
答案 0 :(得分:2)
但我不确定这是怎么回事?
是的,基本上它是如何运作的。正如the source code 一样,完整的详细信息(该行号会随着时间的推移而腐烂......)。目前,它看起来像这样:
map: function( elems, callback, arg ) {
var value,
i = 0,
length = elems.length,
isArray = isArraylike( elems ),
ret = [];
// Go through the array, translating each of the items to their new values
if ( isArray ) {
for ( ; i < length; i++ ) {
value = callback( elems[ i ], i, arg );
if ( value != null ) {
ret.push( value );
}
}
// Go through every key on the object,
} else {
for ( i in elems ) {
value = callback( elems[ i ], i, arg );
if ( value != null ) {
ret.push( value );
}
}
}
// Flatten any nested arrays
return concat.apply( [], ret );
},
答案 1 :(得分:2)
嗯,没有比查看源代码更好的检查方法
了function (elems, callback, arg) {
var value, i = 0,
length = elems.length,
isArray = isArraylike(elems),
ret = [];
// Go through the array, translating each of the items to their new values
if (isArray) {
for (; i < length; i++) {
value = callback(elems[i], i, arg);
if (value != null) {
ret.push(value);
}
}
// Go through every key on the object,
} else {
for (i in elems) {
value = callback(elems[i], i, arg);
if (value != null) {
ret.push(value);
}
}
}
// Flatten any nested arrays
return concat.apply([], ret);
}
Array
版本还是对象,它是循环播放并调用callback
来设置值concat