天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

JavaScript 字符串乘法

原文地址:http://www.davidflanagan.com/2009/08/string-multipli.html
原作者:David Flanagan
在Ruby中,“*”操作符用一個字符串作為左邊參數,一個數字作為右邊參數,來實現字符串重復。例如,"Ruby" * 2 的值為 "RubyRuby"。這僅在少數地方有用(例如,生成一張由連字符等ASCII 碼字符構成的表格),但是非常簡潔。而且好過寫一個循環來連接n次字符串――這樣顯得很沒效率。

我剛剛發現在JavaScript中有個聰明的技巧來實現字符串的乘法:

復制代碼 代碼如下:
String.prototype.times = function(n) {
return Array.prototype.join.call({length:n+1}, this);
};
"js".times(5) // => "jsjsjsjsjs"


這個方法是調用一個由元素全為“undefined”的數組的Array.join()行為。但是它并沒有真正創建一個包含 n+1 個“undefined”元素的數組。它利用一個包含 length 屬性的匿名對象,依靠 Array 對象的原型函數 join()。因為 “Object” 不是數組,不能直接調用 join(),因此不得不通過原型的 call() 來實現。下面給出一個同樣效果的簡單版本:

復制代碼 代碼如下:
String.prototype.times = function(n) { return (new Array(n+1)).join(this);};

當我們調用 Array 的帶一個參數的構造器時,僅僅是設置了數組的長度,實際上并沒有創建數組的元素。

我僅在 Firefox 下對其做了測試,我估計它會比普通的循環更加有效,但我并沒有進行基準測試。

作者簡介
David Flanagan 是一個醉心于Java寫作的計算機程序員,他的大部分時間都致力于編寫Java相關圖書。David 在麻省理工學院獲得了計算機科學于工程學位。他生活在地處西雅圖和溫哥華之間的美國太平洋西北海岸。他在O'Reilly出版的暢銷書有《Java in a Nutshell》、《Java Foundation Classes in a Nutshell》、《Java Enterprise in a Nutshell》、《JavaScript: The Definitive Guide》、《JavaScript Pocket Reference》以及《The Ruby Programming Language》等。

我的評論
如果要考慮效率的話,對循環迭代稍作優化可能效率更高。比如下面這段遞歸調用,算法復雜度是O(log2n)。在Google Chrome下測試結果是比 David 的方法執行更快,但不得不承認他的方法很優雅!
復制代碼 代碼如下:
String.prototype.times = function(n) {
if ( n == 1 ) {
return this;
}
var midRes = this.times(Math.floor(n/2));
midRes += midRes;
if ( n % 2 ) {
midRes += this;
}
return midRes;
}

后記
David 采納了我的建議,他又為我們寫了一段非遞歸的版本。請參看他的博客原文:http://www.davidflanagan.com/2009/08/good-algorithms.html
聯系方式
我的郵箱,歡迎來信(redraiment@gmail.com)

JavaScript技術JavaScript 字符串乘法,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 星空无限传媒视频在线观看视频 | 野花香在线观看免费观看大全动漫 | 三级黄色在线 | 国产探花在线精品一区二区 | 男女车车的车车网站W98免费 | 99爱在线观看精品视频 | 日本午夜视频在线 | 欧美人与禽ZOZO性伦交视频 | 亚洲午夜精品一区二区公牛电影院 | 久久精品热线免费 | 妇少水多18P蜜泬17P亚洲乱 | 国产激情视频在线播放 | 无码欧美XXXXX在线观看裸 | 天天躁日日躁狠狠躁AV麻豆 | 午夜影院c绿象 | 女人会操出水图 | xxxx免费观看 | 超碰国产视频免费播放 | 久久99精品国产免费观看 | 久久午夜一区二区 | 美女张开腿露尿口给男人亲 | 女子叉开腿让男子桶免费软件 | 香蕉久久夜色精品国产小优 | 麻豆精品国产剧情观看 | 囯产精品麻豆巨作久久 | 国产精品久久久久久亚洲影视 | 老女人与小伙子露脸对白 | 俄罗斯15一16处交 | 我年轻漂亮的继坶2中字在线播放 | 午夜婷婷精品午夜无码A片影院 | 最近中文字幕完整版免费高清 | 老师的丝袜脚 | 色久悠悠无码偷拍自怕 | 99热在线观看 | 麻豆区蜜芽区 | 国产精品伦一区二区三级视频 | 就去色一色 | 国产成人精品自拍 | 诱受H嗯啊巨肉舍友1V1 | 激情内射亚州一区二区三区爱妻 | 孕妇bbwbbwbbwbbw超清 |