刚开始看 underscore 的源码,看到 _.each 与 _.map 的实现,这两个函数的区别是是否返回一个对传入的类数组的每个元素进行操作并将结果保持在新数组中返回。
在 underscore 中的 _.each 与 _.map:
为什么在 _.each 不与 _.map 中相同的使用:
for (var index = 0; index < length; index++) { var currentKey = keys ? keys[index] : index; results[index] = iteratee(obj[currentKey], currentKey, obj); }
而是使用 if...else... 结构?
为什么不这样写?
_.each = function(obj, iteratee, context) { iteratee = cb(iteratee, context); var keys = !isArrayLike(obj) && _.keys(obj), length = (keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = keys ? keys[index] : index; iteratee(obj[currentKey], currentKey, obj); } };
是因为传入 _.each 中的类数组频率高于传入对象吗?
明月笑刀无情
相关分类