摘要:依據(jù)每一個(gè)堿基,為其找到配對(duì)的堿基,然后將結(jié)果作為第二個(gè)數(shù)組返回。堿基對(duì)是一對(duì)和,為給定的字母匹配缺失的堿基。輸入檢查算法挑戰(zhàn)檢查一個(gè)值是否是基本布爾類型,并返回或。基本布爾類型即和。二進(jìn)制字符串是以空格分隔的。
前言
W3Cschool上有個(gè)編程挑戰(zhàn),里面的題目前是面向前端方面的,也有一些算法和數(shù)據(jù)結(jié)構(gòu)的題在,最近忙于實(shí)習(xí),已經(jīng)很久沒做了,前后隔了一個(gè)月,在公司沒事的時(shí)候又重新做了起來(lái),索性花了2天把剩下的一起做完了。在此做下代碼思路的記錄。
區(qū)間求值算法挑戰(zhàn)我們會(huì)傳遞給你一個(gè)包含兩個(gè)數(shù)字的數(shù)組。返回這兩個(gè)數(shù)字和它們之間所有數(shù)字的和。
最小的數(shù)字并非總在最前面。
function sumAll(arr) { return (arr[0] + arr[1]) * (Math.abs(arr[0] - arr[1]) + 1) / 2; } console.log(sumAll([1, 4]));找出數(shù)組間差異算法挑戰(zhàn)
比較兩個(gè)數(shù)組,然后返回一個(gè)新數(shù)組,該數(shù)組的元素為兩個(gè)給定數(shù)組中所有獨(dú)有的數(shù)組元素。換言之,返回兩個(gè)數(shù)組的差異。
//map或forEach數(shù)組方法 var diff = function(arr1, arr2) { var diff = []; arr1.map(function(val1) { if (arr2.indexOf(val1) < 0) { diff.push(val1); } else { arr2.splice(arr2.indexOf(val1), 1); } }); return diff.concat(arr2); }; //傳統(tǒng)for循環(huán) // var diff = function(arr1, arr2) { // var diff = []; // for (var i = 0; i < arr1.length; i++) { // if (arr2.indexOf(arr1[i]) < 0) { // diff.push(arr1[i]); // } else { // arr2.splice(arr2.indexOf(arr1[i]), 1); // } // } // return diff.concat(arr2); // }; console.log(diff([1, 2, 3, 6, 5], [1, 2, 3, 4, 5]));數(shù)字轉(zhuǎn)羅馬數(shù)字
將給定的數(shù)字轉(zhuǎn)換成羅馬數(shù)字。
所有返回的 羅馬數(shù)字 都應(yīng)該是大寫形式。
代碼的關(guān)鍵在于lookup對(duì)象里面的鍵值對(duì),都是1,4,5,9這幾個(gè)數(shù)字進(jìn)位。 看圖更容易明白。
function convert(num) { var lookup ={M:1000,CM:900,D:500,CD:400,C:100,XC:90,L:50,XL:40,X:10,IX:9,V:5,IV:4,I:1}; var romanStr = ""; for (var i in lookup){ while (num >= lookup[i]){ romanStr+=i; num -= lookup[i]; } } return romanStr; } convert(36);對(duì)象搜索算法挑戰(zhàn)
寫一個(gè) function,它遍歷一個(gè)對(duì)象數(shù)組(第一個(gè)參數(shù))并返回一個(gè)包含相匹配的屬性-值對(duì)(第二個(gè)參數(shù))的所有對(duì)象的數(shù)組。如果返回的數(shù)組中包含 source 對(duì)象的屬性-值對(duì),那么此對(duì)象的每一個(gè)屬性-值對(duì)都必須存在于 collection 的對(duì)象中。
例如,如果第一個(gè)參數(shù)是 [{ first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }],第二個(gè)參數(shù)是 { last: "Capulet" },那么你必須從數(shù)組(第一個(gè)參數(shù))返回其中的第三個(gè)對(duì)象,因?yàn)樗俗鳛榈诙€(gè)參數(shù)傳遞的屬性-值對(duì)。
function where(collection, source) { var arr = [], index = 0; // What"s in a name? // console.log(Object.getOwnPropertyNames(source).length); //獲取對(duì)象屬性個(gè)數(shù) for (; index < collection.length; index++) { for (var key in collection[index]) { var count = 0; for (var key2 in source) { if (collection[index].hasOwnProperty(key2)) { if (source[key2] == collection[index][key2]) { count++; } if (count == Object.getOwnPropertyNames(source).length && key == key2) { arr.push(collection[index]); } } } } } return arr; }查詢替換算法挑戰(zhàn)
使用給定的參數(shù)對(duì)句子執(zhí)行一次查找和替換,然后返回新句子。
第一個(gè)參數(shù)是將要對(duì)其執(zhí)行查找和替換的句子。
第二個(gè)參數(shù)是將被替換掉的單詞(替換前的單詞)。
第三個(gè)參數(shù)用于替換第二個(gè)參數(shù)(替換后的單詞)。
注意:替換時(shí)保持原單詞的大小寫。例如,如果你想用單詞 "dog" 替換單詞 "Book" ,你應(yīng)該替換成 "Dog"。
function myReplace(str, before, after) { var newBefore = before.split(""), newAfter = after.split(""), upindex = [], i = 0, index = 0; for (; i < newBefore.length; i++) { if (newBefore[i] > "A" && newBefore[i] < "Z") { upindex.push(i); } } for (; index < upindex.length; index++) { if (newAfter[upindex[index]]) { newAfter[upindex[index]] = newAfter[upindex[index]].toString().toUpperCase(); } } return str.replace(before, newAfter.join("")); }字符串移動(dòng)插入算法挑戰(zhàn)
把指定的字符串翻譯成 pig latin。
Pig Latin 把一個(gè)英文單詞的第一個(gè)輔音或輔音叢(consonant cluster)移到詞尾,然后加上后綴 "ay"。
如果單詞以元音開始,你只需要在詞尾添加 "way" 就可以了。
function translate(str) { var a = str.search(/[aeiou]/); var str2 = str; if (a === 0) { str2 += "way"; } else { str2 = str.substr(a); str2 += str.substr(0, a); str2 += "ay"; } return str2; } translate("consonant");字符配對(duì)算法挑戰(zhàn)
DNA 鏈缺少配對(duì)的堿基。依據(jù)每一個(gè)堿基,為其找到配對(duì)的堿基,然后將結(jié)果作為第二個(gè)數(shù)組返回。
Base pairs(堿基對(duì)) 是一對(duì) AT 和 CG,為給定的字母匹配缺失的堿基。
在每一個(gè)數(shù)組中將給定的字母作為第一個(gè)堿基返回。
例如,對(duì)于輸入的 GCG,相應(yīng)地返回 [["G", "C"], ["C","G"],["G", "C"]]
字母和與之配對(duì)的字母在一個(gè)數(shù)組內(nèi),然后所有數(shù)組再被組織起來(lái)封裝進(jìn)一個(gè)數(shù)組。
function pair(str) { var arr = new Array(); str = str.split(""); for (var index = 0; index < str.length; index++) { arr[index] = new Array(); arr[index].push(str[index]); if (str[index] == "G" || str[index] == "C") { (arr[index] == "G") ? arr[index].push( "C"): arr[index].push("G"); } else { (arr[index] == "A") ? arr[index].push("T"): arr[index].push("A"); } } return arr; }字符串查詢補(bǔ)充算法挑戰(zhàn)
從傳遞進(jìn)來(lái)的字母序列中找到缺失的字母并返回它。
如果所有字母都在序列中,返回 undefined。
function fearNotLetter(str) { var sub; for (var index = 0; index < str.length - 1; index++) { sub = str.charCodeAt(index + 1) - str.charCodeAt(index); if (sub == 1) { if (index == str.length) { return undefined; } } else { return String.fromCharCode(str.charCodeAt(index) + 1); } } }輸入檢查算法挑戰(zhàn)
檢查一個(gè)值是否是基本布爾類型,并返回 true 或 false。
基本布爾類型即 true 和 false。
function boo(bool) { if (bool === true || bool ===false){ return true; } return false; }數(shù)組去重算法挑戰(zhàn)
寫一個(gè) function,傳入兩個(gè)或兩個(gè)以上的數(shù)組,返回一個(gè)以給定的原始數(shù)組排序的不包含重復(fù)值的新數(shù)組。
換句話說(shuō),所有數(shù)組中的所有值都應(yīng)該以原始順序被包含在內(nèi),但是在最終的數(shù)組中不包含重復(fù)值。
非重復(fù)的數(shù)字應(yīng)該以它們?cè)嫉捻樞蚺判颍罱K的數(shù)組不應(yīng)該以數(shù)字順序排序。
function unite(arr1, arr2, arr3, arr4) { var arr = [], result = [], index = 0; if (arr4) { arr = arr1.concat(arr2, arr3, arr4); } else if (arr3) { arr = arr1.concat(arr2, arr3); } else { arr = arr1.concat(arr2); } for (; index < arr.length; index++) { if (result.indexOf(arr[index]) == -1) { result.push(arr[index]); } } return result; }
es6實(shí)現(xiàn)
//ES6新增的Set數(shù)據(jù)結(jié)構(gòu),類似于數(shù)組,但是里面的元素都是唯一的 ,其構(gòu)造函數(shù)可以接受一個(gè)數(shù)組作為參數(shù) //let arr=[1,2,1,2,6,3,5,69,66,7,2,1,4,3,6,8,9663,8] //let set = new Set(array); //{1,2,6,3,5,69,66,7,4,8,9663} //ES6中Array新增了一個(gè)靜態(tài)方法from,可以把類似數(shù)組的對(duì)象轉(zhuǎn)換為數(shù)組 //Array.from(set) //[1,2,6,3,5,69,66,7,4,8,9663] function removeRepeatArray(arr){ return Array.from(new Set(arr)) }html符號(hào)轉(zhuǎn)實(shí)體算法挑戰(zhàn)
將字符串中的字符 &、<、>、" (雙引號(hào)), 以及 " (單引號(hào))轉(zhuǎn)換為它們對(duì)應(yīng)的 HTML 實(shí)體。
function convert(str) { return str.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/"/g,"'"); } convert("Dolce & Gabbana");數(shù)組平鋪算法挑戰(zhàn)
對(duì)嵌套的數(shù)組進(jìn)行平鋪嵌套數(shù)組。你必須考慮到不同層級(jí)的嵌套。
function steamroller(arr) { // I"m a steamroller, baby return arr.reduce(function (acc, val) { return acc.concat(Array.isArray(val) ? (val.length > 0 ? steamroller(val) : []) : val); }, []); } steamroller([1, [2], [3, [[4]]]]);二進(jìn)制轉(zhuǎn)字符算法挑戰(zhàn)
傳入二進(jìn)制字符串,翻譯成英語(yǔ)句子并返回。
二進(jìn)制字符串是以空格分隔的。
function binaryAgent(str) { var arg = str.split(" "); var temp, i; var newArg = new Array(); for (i = 0; i < arg.length; i++) { temp = String.fromCharCode(parseInt(arg[i], 2)); newArg.push(temp); } return newArg.join(""); } console.log(binaryAgent( "01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111" ));數(shù)組元素判斷算法挑戰(zhàn)
完善編輯器中的every函數(shù),如果集合(collection)中的所有對(duì)象都存在對(duì)應(yīng)的屬性(第二個(gè)參數(shù)),并且屬性(第二個(gè)參數(shù))對(duì)應(yīng)的值為真。函數(shù)返回ture。反之,返回false。
記住:您可以通過點(diǎn)符號(hào)或[]符號(hào)來(lái)訪問對(duì)象屬性。
function every(collection, pre) { // Is everyone being true? function check(element, index, array) { return element[pre]; } if (collection.every(check)) { return true; } else return false; }函數(shù)迭代可選參數(shù)算法挑戰(zhàn)
創(chuàng)建一個(gè)計(jì)算兩個(gè)參數(shù)之和的 function。如果只有一個(gè)參數(shù),則返回一個(gè) function,該 function 請(qǐng)求一個(gè)參數(shù)然后返回求和的結(jié)果。
例如,add(2, 3) 應(yīng)該返回 5,而 add(2) 應(yīng)該返回一個(gè) function。
調(diào)用這個(gè)有一個(gè)參數(shù)的返回的 function,返回求和的結(jié)果:
var sumTwoAnd = add(2);
sumTwoAnd(3) 返回 5。
如果兩個(gè)參數(shù)都不是有效的數(shù)字,則返回 undefined。
var add = function(x, r) { if (arguments.length == 1 && !isNaN(x)) { return function(y) { if (y instanceof Array) { return undefined; } else return x + y; }; } else if (typeof(r) == "string" || isNaN(x)) { return undefined; } else return x + r; }; function add() { var arr=[].concat(...arguments); if( arr.some(function(ele){ return typeof ele!="number"; }) ){ //參數(shù)出現(xiàn)非數(shù)字類型,返回undefined return undefined; } if( arr.length==2 ){ return arr[0]+arr[1]; } return function(a){ if( typeof a != "number" ){ //同上 return undefined; } return a+arr[0]; }; }
注: isNaN()的參數(shù)如果不是數(shù)值型的會(huì)先自動(dòng)轉(zhuǎn)換成數(shù)值型,再來(lái)判斷這個(gè)數(shù)值是不是NaN
MDN文檔節(jié)選關(guān)于isNaN // The same effect with Number.isNaN(): function increment(x) { if (Number.isNaN(Number(x))) x = 0; return x + 1; }; // In the following cases for the function"s argument x, // isNaN(x) is always false, although x is indeed not a // number, but can be used as such in arithmetical // expressions increment(""); // 1: "" is converted to 0 increment(new String()); // 1: String object representing an empty string is converted to 0 increment([]); // 1: [] is converted to 0 increment(new Array()); // 1: Array object representing an empty array is converted to 0 increment("0"); // 1: "0" is converted to 0 increment("1"); // 2: "1" is converted to 1 increment("0.1"); // 1.1: "0.1" is converted to 0.1 increment("Infinity"); // Infinity: "Infinity" is converted to Infinity increment(null); // 1: null is converted to 0 increment(false); // 1: false is converted to 0 increment(true); // 2: true is converted to 1 increment(new Date()); // returns current date/time in milliseconds plus 1End
文中省略了一些題目的答案,因?yàn)槠A(chǔ)和比較簡(jiǎn)單,我就略過了。如果大家有es6標(biāo)準(zhǔn)下或其他的一些解法思路,也可以跟我討論。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/84945.html
摘要:方法二提供者沐辰樓姬采用對(duì)象的方法取值優(yōu)化內(nèi)部循環(huán)性能確認(rèn)末尾字符算法挑戰(zhàn)檢查一個(gè)字符串是否以指定的字符串結(jié)尾。方法一方法二提供者沐辰樓姬使用數(shù)組對(duì)象方法,把數(shù)組的第一個(gè)元素從其中刪除,并返回第一個(gè)元素的值。 showImg(https://segmentfault.com/img/remote/1460000009702368?w=1269&h=541); 前言 偶然看到W3Csch...
摘要:方法二提供者沐辰樓姬采用對(duì)象的方法取值優(yōu)化內(nèi)部循環(huán)性能確認(rèn)末尾字符算法挑戰(zhàn)檢查一個(gè)字符串是否以指定的字符串結(jié)尾。方法一方法二提供者沐辰樓姬使用數(shù)組對(duì)象方法,把數(shù)組的第一個(gè)元素從其中刪除,并返回第一個(gè)元素的值。 showImg(https://segmentfault.com/img/remote/1460000009702368?w=1269&h=541); 前言 偶然看到W3Csch...
摘要:設(shè)置首字母大寫算法挑戰(zhàn)返回一個(gè)字符串確保字符串的每個(gè)單詞首字母都大寫,其余部分小寫。確認(rèn)末尾字符算法檢查一個(gè)字符串是否以指定的字符串結(jié)尾。刪除數(shù)組中特定值算法挑戰(zhàn)刪除數(shù)組中的所有的假值。 在w3cschool上看到了這些初級(jí)算法題目,自己先嘗試做了一下,不會(huì)的也會(huì)查看一下別人的借鑒一下思路,更多的幫助自己熟悉字符串和數(shù)組方法的應(yīng)用.如果您有更好的解法,可以指出來(lái)還有中級(jí)算法題目和后面的...
摘要:法一法二使用給定的參數(shù)對(duì)句子執(zhí)行一次查找和替換,然后返回新句子。法一法二把指定的字符串翻譯成。在每一個(gè)數(shù)組中將給定的字母作為第一個(gè)堿基返回。法一后項(xiàng)減去前項(xiàng)法二檢查一個(gè)值是否是基本布爾類型,并返回或。基本布爾類型即和。 Diff Two Arrays 比較兩個(gè)數(shù)組,然后返回一個(gè)新數(shù)組,該數(shù)組的元素為兩個(gè)給定數(shù)組中所有獨(dú)有的數(shù)組元素。換言之,返回兩個(gè)數(shù)組的差異。 function dif...
閱讀 3294·2021-10-11 11:08
閱讀 4435·2021-09-22 15:54
閱讀 919·2019-08-30 15:56
閱讀 873·2019-08-30 15:55
閱讀 3547·2019-08-30 15:52
閱讀 1359·2019-08-30 15:43
閱讀 1941·2019-08-30 11:14
閱讀 2511·2019-08-29 16:11