javascript
汤姆大叔的6道javascript编程题题解
1、找出數(shù)字?jǐn)?shù)組中最大的元素(使用Math.max函數(shù))
| 1 2 3 | var?a = [1, 2, 3, 6, 5, 4]; var?ans = Math.max.apply(null, a); console.log(ans);??// 6 |
這題很巧妙地用了apply,如果不是數(shù)組,是很多數(shù)字求最大值,我們知道可以這樣:
| 1 2 | var?ans = Math.max(1, 2, 3, 4, 5, 6); console.log(ans);?// 6 |
而apply的第二個(gè)參數(shù)正是一個(gè)數(shù)組,都不用進(jìn)行轉(zhuǎn)換了。
還有一種用eval+toString的實(shí)現(xiàn):
| 1 2 3 | var?a = [1, 2, 3, 6, 5, 4]; var?ans = eval(?'Math.max('?+ a.toString() +?')'); console.log(ans);?// 6 |
2、轉(zhuǎn)化一個(gè)數(shù)字?jǐn)?shù)組為function數(shù)組(每個(gè)function都彈出相應(yīng)的數(shù)字)
| 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個(gè)a標(biāo)簽,彈出相應(yīng)標(biāo)簽對(duì)應(yīng)的編號(hào)是一個(gè)類型的題,用閉包保存變量到內(nèi)存即可。
3、給object數(shù)組進(jìn)行排序(排序條件是每個(gè)元素對(duì)象的屬性個(gè)數(shù))
| 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); |
這題不難,數(shù)組排序,當(dāng)然是sort,排序條件是對(duì)象的屬性個(gè)數(shù),可以寫個(gè)函數(shù)計(jì)算,注意可能要用hasOwnProperty判斷下。
4、利用JavaScript打印出Fibonacci數(shù)(不使用全局變量)
| 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); |
這題沒看明白,是打出斐波那契數(shù)列的前n項(xiàng)么?還是第n項(xiàng)...
| 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表示需要的斐波那契數(shù)列個(gè)數(shù) // 0 // 1 // 1 // 2 // 3 |
不使用全局變量,我把它們寫在函數(shù)里了應(yīng)該算是局部變量了吧,難道這樣就好了?你怎么看?
5、實(shí)現(xiàn)如下語(yǔ)法的功能: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對(duì)象上加擴(kuò)展方法即可,傳說中這樣很不好,but我也想不到更好的辦法了...
6、實(shí)現(xiàn)如下語(yǔ)法的功能: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 |
對(duì)valueOf和toString的考察,具體可以參考《valueOf和toString》?
另看到一種很飄逸的寫法(來(lái)自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); ? |
轉(zhuǎn)載于:https://www.cnblogs.com/JohnLiang/p/5715771.html
總結(jié)
以上是生活随笔為你收集整理的汤姆大叔的6道javascript编程题题解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux7.2配置多路径软件,RHEL
- 下一篇: Oracle查看表空间及使用情况