为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 underscore 的 _.each 与 _.map 不同?

为什么 underscore 的 _.each 与 _.map 不同?

浮云间 2018-08-13 14:14:30
刚开始看 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 中的类数组频率高于传入对象吗?
查看完整描述

1 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

个人理解

两个函数的核心区别是 是否返回结果。
代码中的核心区别 就体现在在了 results上。
出于性能考虑 , 创建定长的数组 比 想数组中逐个追加元素的 速度快。
历次类推 results _> len _> keys
既然keys已经可知了, 统一一个循环处理keys数组就可以了。 至于每次三目运算符的性能损耗忽略不计吧, 很低很低。


查看完整回答
反对 回复 2018-09-23
  • 1 回答
  • 0 关注
  • 810 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信