成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

js學(xué)習(xí)過程中的小問題

OBKoro1 / 2996人閱讀

摘要:一個初學(xué)者啦想要記錄一下遇到的小問題。返回值存入,接著進(jìn)行第二次迭代。返回迭代結(jié)束后的結(jié)果。這是高級程序設(shè)計上面介紹的。參數(shù)是數(shù)組中的第一個元素的值。再補充一點的每一次遞歸必須要有返回值,否則會出錯這一點也有相似性質(zhì)

一個js初學(xué)者啦~想要記錄一下遇到的小問題。也希望和大家交流。

1.Array#sort

Array#sort方法在沒有指定參數(shù)的情況下,是執(zhí)行的是字符串的比較。如下列代碼

[0,-1,-2].sort();//=>[-1,-2,0]

和我們預(yù)想的并不一致啊,既不是從小到大也不是從大到小。這是因為javascript的sort方法是將數(shù)字轉(zhuǎn)換成字符串再檢查。即先檢查負(fù)號,然后1<2,故排列為-1,-2,0,和我們預(yù)期的并不一樣。正確的寫法如下(即需要傳入一個用于比較的函數(shù)):

[-1,-2,0].sort(function(x,y){
    return x-y;//從小到大
    //return y-x; //從大到小
    //或者是
    return x<=y;
})
2.關(guān)于reduce的用法

Array.reduce()是可以傳入兩個參數(shù),用于處理每一項的函數(shù)和迭代的初始值(可選)?;A(chǔ)的用法一般是用于求數(shù)組的和,這也是javascript高級程序設(shè)計書中的例子:

var values = [1,2,3,4,5];
var sum = values.reduce(
    function(prev,cur,index,array){
        return prev+cur;
    });
console.log(sum);//15

其實也可以在reduce函數(shù)的第二個參數(shù)上加一個迭代初始值0,這里應(yīng)該是默認(rèn)是0了。迭代過程如下:

prev=1,cur = 2,然后prev+cur=3,返回結(jié)果。

返回值存入prev,接著進(jìn)行第二次迭代。

接著進(jìn)行下一次迭代直至迭代完。

返回迭代結(jié)束后的結(jié)果。

這是javascript高級程序設(shè)計上面介紹的。然而我寫了一個測試的代碼。

function reduceFunc(arr){
  arr.reduce(function(prev,cur,index,array){
    console.log(arguments);
    return prev+cur;
  },0);
}

就是增加了一句打印每次迭代參數(shù),而且initialValue給定了0的值。發(fā)現(xiàn)第一次的prev是0,可是第一個值應(yīng)該是1對不對。javascript高級程序設(shè)計(第三版)中98頁寫道“第一次迭代發(fā)生在數(shù)組的第二項上,因此第一個參數(shù)是數(shù)組的第一項,第二個參數(shù)就是數(shù)組的第二項”。所以是書本有錯嗎?不盡然。我查到MSDN關(guān)于reduce的介紹。是這樣解釋這個問題的:
第一次執(zhí)行回調(diào)函數(shù)時:

如果向 reduce 方法提供 initialValue:
prev 參數(shù)為 initialValue。
cur 參數(shù)是數(shù)組中的第一個元素的值。

如果未提供 initialValue:
prev 參數(shù)是數(shù)組中的第一個元素的值。
cur 參數(shù)是數(shù)組中的第二個元素的值。

一般情況下迭代的初始值不需要寫,也就是

reduce(function(){
    //
});

這樣用即可,但是如果存儲每次迭代結(jié)果的是一個數(shù)組的話就不能這樣啦。今天看到一個比較高級一點的用法。就是迭代結(jié)果是數(shù)組,先貼代碼

var str = "name,age,hair
 Merble,35,red
Bob ,64, blonde";

function lameCSV(str){
  return str.split("
").reduce(function(table,row,index,array){
    console.log(index);
    table.push(row.split(",").map(function(c){
      return c.trim();
    })
    );
    return table;
  }, []);
}

代碼大致就是實現(xiàn)一個把字符串解析成數(shù)組的形式。這里prev寫的是table。如果說沒有倒數(shù)第二行設(shè)置為空數(shù)組的話,table.push()是會報錯的。因為如上文所說,如果不指定迭代初始值的話,第一次迭代prev(也就是table)的取值是1。顯然1是沒有Push方法的。
再來具體說說這個函數(shù)。

1. row每次分割之后返回trim()之后的值,table再將其push進(jìn)去。
2. 接著返回table數(shù)組作為新一輪的迭代初值。進(jìn)行下一行的迭代。
3. 然后reduce函數(shù)內(nèi)的return語句會把table迭代結(jié)束的結(jié)果返回出來。函數(shù)運行結(jié)束。
再補充一點

reduce的每一次遞歸必須要有返回值,否則會出錯

var arr = [1,2,3,4];
function Process(prev,cur){
      if(prev!=3){
            return prev+cur;
      }
}
arr.reduce(Process);//NaN

這一點map也有相似性質(zhì)

function mapFunc(value){
    if(value!=2){return value;}
}
arr.map(mapFunc);//undefined

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/80550.html

相關(guān)文章

  • 寫一本關(guān)于 React.js 的小

    摘要:因為工作中一直在使用,也一直以來想總結(jié)一下自己關(guān)于的一些知識經(jīng)驗。于是把一些想法慢慢整理書寫下來,做成一本開源免費專業(yè)簡單的入門級別的小書,提供給社區(qū)。本書的后續(xù)可能會做成視頻版本,敬請期待。本作品采用署名禁止演繹國際許可協(xié)議進(jìn)行許可 React.js 小書 本文作者:胡子大哈本文原文:React.js 小書 轉(zhuǎn)載請注明出處,保留原文鏈接以及作者信息 在線閱讀:http://huzi...

    Scorpion 評論0 收藏0
  • 幾個js開發(fā)過程的小技巧

    摘要:前言是一門非常靈活的語言,實際的開發(fā)過程中我們也可以靈活的使用它而給我們的工作帶來便利,這篇文章記錄了自己平時學(xué)習(xí)過程中經(jīng)常用到的一些小技巧,整理出來作為筆記,也希望對感興趣的同學(xué)有所幫助。 前言 javascript是一門非常靈活的語言,實際的開發(fā)過程中我們也可以靈活的使用它而給我們的工作帶來便利,這篇文章記錄了自己平時學(xué)習(xí)過程中經(jīng)常用到的一些小技巧,整理出來作為筆記,也希望對感興趣...

    golden_hamster 評論0 收藏0
  • node.js初體驗之利用node.js的fs-文件系統(tǒng),來寫一個批量修改文件名的小工具

    摘要:導(dǎo)語公司最近業(yè)務(wù)不忙,利用閑暇時間準(zhǔn)備學(xué)習(xí)一下,看見網(wǎng)上前端大牛張旭鑫的文章一般般的網(wǎng)頁重構(gòu)可以使用做些什么,跟著寫了一下批量修改文件名的小工具,主要利用的中相關(guān)方法來實現(xiàn)記錄一下,以備后用。 導(dǎo)語:公司最近業(yè)務(wù)不忙,利用閑暇時間準(zhǔn)備學(xué)習(xí)一下Node.js,看見網(wǎng)上前端大牛張旭鑫的文章JS一般般的網(wǎng)頁重構(gòu)可以使用Node.js做些什么?,跟著寫了一下批量修改文件名的javascript...

    Steve_Wang_ 評論0 收藏0
  • 我是如何學(xué)習(xí)小程序的

    摘要:行勝于言,理論結(jié)合實踐才是王道,所以本文我將基于前面的學(xué)習(xí)方法,分享我是如何學(xué)習(xí)微信小程序的。第二個目標(biāo)則需要學(xué)習(xí)小程序的插件相關(guān)接口調(diào)用,以及蟬知建站系統(tǒng)這邊的微信模塊代碼。 前段時間和大家一起分享了一篇關(guān)于學(xué)習(xí)方法內(nèi)容《大牛與搬運工的差距——學(xué)習(xí)方法的力量》。我們將學(xué)習(xí)過程分成八步,并借鑒了敏捷開發(fā)的迭代思想,以達(dá)到自我迭代學(xué)習(xí)的效果。行勝于言,理論結(jié)合實踐才是王道,所以本文我將基...

    XGBCCC 評論0 收藏0
  • 教你如何一鍵反編譯獲取任何微信小程序源代碼(圖形化界面,傻瓜式操作)

    摘要:很想一窺源碼,查看究竟,看看大廠的前端大神們是如何規(guī)避了小程序的各種奇葩的坑。頭發(fā)減減可是問題是吶好看的小程序,又獲得不到源代碼。所以啊,才能容易的反編譯出來,如果是那就很難了一鍵獲取微信小程序源代碼 ? 1 Tips: 2   一鍵獲取微信小程序源碼, 使用了C#加nodejs制作 直接解壓在D盤根目錄下后就可以使用 將小程序文件放到 wxapkg目錄下3 這個目錄下有一些demo...

    RyanQ 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<