日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

汤姆大叔的6道javascript编程题题解

發布時間:2023/12/9 javascript 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汤姆大叔的6道javascript编程题题解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、找出數字數組中最大的元素(使用Math.max函數)

1 2 3 var?a = [1, 2, 3, 6, 5, 4]; var?ans = Math.max.apply(null, a); console.log(ans);??// 6

  這題很巧妙地用了apply,如果不是數組,是很多數字求最大值,我們知道可以這樣:

1 2 var?ans = Math.max(1, 2, 3, 4, 5, 6); console.log(ans);?// 6

  而apply的第二個參數正是一個數組,都不用進行轉換了。

  還有一種用eval+toString的實現:

1 2 3 var?a = [1, 2, 3, 6, 5, 4]; var?ans = eval(?'Math.max('?+ a.toString() +?')'); console.log(ans);?// 6

2、轉化一個數字數組為function數組(每個function都彈出相應的數字)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 var?a = [1, 2, 3, 4, 5, 6]; var?len = a.length; for(var?i = 0; i < len; i++) { ??var?num = a[i]; ??(function(num) { ????var?f =?function() { ??????console.log(num); ????}; ????a[i] = f; ??})(num); } for(var?i = 0; i < len; i++) ??a[i](); // 1 // 2 // 3 // 4 // 5 // 6

  我覺得這跟給n個a標簽,彈出相應標簽對應的編號是一個類型的題,用閉包保存變量到內存即可。

3、給object數組進行排序(排序條件是每個元素對象的屬性個數)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 var?a = { ??name:?'hanzichi', ??age: 10, ??location:?'china' }; var?b = { ??name:?'curry' }; var?c = { ??name:?'kobe', ??sex:?'male' }; Object.prototype.getLength =??function() { ??var?num = 0; ??for(var?key?in?this) { ????if(this.hasOwnProperty(key)) ??????num++; ??} ??return?num; }; var?arr = [a, b, c]; arr.sort(function(a, b) { ??return?a.getLength() > b.getLength(); }); console.log(arr);

  這題不難,數組排序,當然是sort,排序條件是對象的屬性個數,可以寫個函數計算,注意可能要用hasOwnProperty判斷下。

4、利用JavaScript打印出Fibonacci數(不使用全局變量)

1 2 3 4 5 6 (function(a, b) { ??var?c = a + b; ??console.log(c); ??if(c > 100)?return; ??arguments.callee(b, c); })(-1, 1);

  這題沒看明白,是打出斐波那契數列的前n項么?還是第n項...

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 function?fn(n) { ??var?a = []; ??a[0] = 0, a[1] = 1; ??for(var?i = 2; i < n; i++) ????a[i] = a[i - 1] + a[i - 2]; ??for(var?i = 0; i < n; i++) ????console.log(a[i]); } fn(5);?// 10表示需要的斐波那契數列個數 // 0 // 1 // 1 // 2 // 3

  不使用全局變量,我把它們寫在函數里了應該算是局部變量了吧,難道這樣就好了?你怎么看?

5、實現如下語法的功能:var a = (5).plus(3).minus(6); //2

1 2 3 4 5 6 7 8 9 10 Number.prototype.plus =?function(a) { ??return?this?+ a; }; Number.prototype.minus =?function(a) { ??return?this?- a; }; var?a = (5).plus(3).minus(6); console.log(a);?// 2

  直接在Number對象上加擴展方法即可,傳說中這樣很不好,but我也想不到更好的辦法了...

6、實現如下語法的功能:var a = add(2)(3)(4); //9

1 2 3 4 5 6 7 8 9 10 11 function?add(a) { ??var?temp =?function(b) { ????return?add(a + b); ??} ??temp.valueOf = temp.toString =?function() { ????return?a; ??}; ??return?temp; } var?ans = add(2)(3)(4); console.log(ans);?// 9

  對valueOf和toString的考察,具體可以參考《valueOf和toString》?

  另看到一種很飄逸的寫法(來自Gaubee):

1 2 3 4 5 6 7 8 function?add(num){ ??num += ~~add; ??add.num = num; ??return?add; } add.valueOf = add.toString =?function(){return?add.num}; var?ans = add(3)(4)(5)(6);??// 18 alert(ans);

?

轉載于:https://www.cnblogs.com/JohnLiang/p/5715771.html

總結

以上是生活随笔為你收集整理的汤姆大叔的6道javascript编程题题解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。