亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于underscore源碼中map方法的一點疑問?

關于underscore源碼中map方法的一點疑問?

收到一只叮咚 2019-02-27 13:10:16
_.map = _.collect = function(obj, iteratee, context) {iteratee = cb(iteratee, context);// 這里的keys是希望得到一個數組吧,而實際源碼中會得到一個Boolean值// 是否應該換成這種寫法?keys = !isArray(obj) ? _.keys(obj) : void 0var keys = !isArrayLike(obj) && _.keys(obj),      length = (keys || obj).length,    results = Array(length);for (var index = 0; index < length; index++) {  var currentKey = keys ? keys[index] : index;  results[index] = iteratee(obj[currentKey], currentKey, obj);}return results;};
查看完整描述

1 回答

?
30秒到達戰場

TA貢獻1828條經驗 獲得超6個贊

需要注意的是&&和||的用法,

當使用a && b的時候,如果a是假值,則不會對b求值;

當使用a || b的時候,如果a是真值,則不會對b求值;


// 當obj是數組的時候,keys是false,當obj不是數組的時候,返回鍵值組成的數組

var keys = !isArrayLike(obj) && _.keys(obj),

    // 當obj是數組的時候,keys是false,所以(keys || obj)的結果是obj,所以length=obj.length,注意因為obj是數組,所以obj.length正好是數組的長度;

    // 當obj不是數組的時候,keys是obj的鍵值組成的數組;

    length = (keys || obj).length,

    results = Array(length);

for (var index = 0; index < length; index++) {

    // 當obj是數組的時候,keys是false,所以currentKey就是index;

    // 當obj不是數組的時候,keys是鍵值組成的數組,currentKey是keys[index];

    var currentKey = keys ? keys[index] : index;

    results[index] = iteratee(obj[currentKey], currentKey, obj);

}

return results;

所以當obj是數組的時候,keys只要是一個假值,這段代碼就能正確執行,


keys = !isArray(obj) ? _.keys(obj) : void 0

這種寫法,在obj是數組的時候,keys是undefined,是一個假值,所以和源碼的寫法沒什么差別。


查看完整回答
反對 回復 2019-03-03
  • 1 回答
  • 0 關注
  • 428 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號