Sum All Numbers in a RangeComplete
我們會(huì)傳遞給你一個(gè)包含兩個(gè)數(shù)字的數(shù)組。返回這兩個(gè)數(shù)字和它們之間所有數(shù)字的和。
最小的數(shù)字并非總在最前面。
function sumAll(arr) {
var start = arr[0];
var end = arr[1];
if (start > end){
var temp = start;
start = end;
end = temp;
}
var sum = 0;
for (var i=start; i<=end; i++){
sum += i;
}
return sum;
}
sumAll([1, 4]);
Diff Two ArraysComplete
比較兩個(gè)數(shù)組,然后返回一個(gè)新數(shù)組,該數(shù)組的元素為兩個(gè)給定數(shù)組中所有獨(dú)有的數(shù)組元素。換言之,返回兩個(gè)數(shù)組的差異。
function diff(arr1, arr2) {
var newArr = arr1.filter(function(data){
if (arr2.indexOf(data) >= 0) return false;
else return true;
});
newArr = newArr.concat(arr2.filter(function(data){
if (arr1.indexOf(data) >= 0) return false;
else return true;
}));
// Same, same; but different.
return newArr;
}
diff([1, 2, 3, 5], [1, 2, 3, 4, 5]);
Roman Numeral Converter
將給定的數(shù)字轉(zhuǎn)換成羅馬數(shù)字。
所有返回的 羅馬數(shù)字 都應(yīng)該是大寫形式。
function convert(num) {
var retStr = "";
if (num >= 4000){
console.log("input out of range");
return retStr;
}
var ROME = [['I', 'V', 'X'], ['X', 'L', 'C'], ['C', 'D', 'M'],['M', ' ', ' ']];
var count = 0;
var i = 0;
while (num > 0){
var str = "";
var d = num % 10;
if (d>0 && d<4){
for (i=0; i<d; i++){
str += ROME[count][0];
}
}
else if (d === 4){
str += ROME[count][0];
str += ROME[count][1];
}
else if (d>=5 && d<9){
str += ROME[count][1];
for (i=0; i<(d-5); i++){
str += ROME[count][0];
}
}
else if (d === 9){
str += ROME[count][0];
str += ROME[count][2];
}
retStr = str + retStr;
count++;
num = parseInt(num/10);
}
return retStr;
}
convert(36);
Where art thou
寫一個(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 = [];
// What's in a name?
var keys = Object.keys(source);
arr = collection.filter(function(obj){
//sourceProps.forEach(function(prop){
for (var i=0; i<keys.length; i++){
if (!obj.hasOwnProperty(keys[i]) || obj[keys[i]] !== source[keys[i]]){
return false;
}
}
return true;
});
return arr;
}
console.log(where([{ first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }], { last: "Capulet" }));
Search and Replace
使用給定的參數(shù)對(duì)句子執(zhí)行一次查找和替換,然后返回新句子。
第一個(gè)參數(shù)是將要對(duì)其執(zhí)行查找和替換的句子。
第二個(gè)參數(shù)是將被替換掉的單詞(替換前的單詞)。
第三個(gè)參數(shù)用于替換第二個(gè)參數(shù)(替換后的單詞)。
注意:替換時(shí)保持原單詞的大小寫。例如,如果你想用單詞 "dog" 替換單詞 "Book" ,你應(yīng)該替換成 "Dog"。
如果你被難住了,記得使用 Read-Search-Ask嘗試與他人結(jié)伴編程、編寫你自己的代碼。
這是一些對(duì)你有幫助的資源:
function myReplace(str, before, after) {
var firstLetter = before.charAt(0);
if (firstLetter >= 'A' && firstLetter <='Z'){
after = after[0].toUpperCase() + after.slice(1);
}
if (firstLetter >= 'a' && firstLetter <='z'){
after = after[0].toLowerCase() + after.slice(1);
}
return str.replace(before, after);
}
str = myReplace("He is Sleeping on the couch", "Sleeping", "sitting");
console.log(str);
高級(jí)首字符大寫方式:
function firstWordUpperCase(str){
return str.toLowerCase().replace(/(\s|^)[a-z]/g, function(char){
return char.toUpperCase();
});
}
作者:qq_32578487
來(lái)源:CSDN
原文:https://blog.csdn.net/qq_32578487/article/details/77870225
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接!
Pig Latin
把指定的字符串翻譯成 pig latin。
Pig Latin 把一個(gè)英文單詞的第一個(gè)輔音或輔音叢(consonant cluster)移到詞尾,然后加上后綴 "ay"。
如果單詞以元音開(kāi)始,你只需要在詞尾添加 "way" 就可以了。
function isVowel(ch){
var VOWEL = ['a', 'e', 'i' ,'o','u'];
if (VOWEL.indexOf(ch)>=0){
return true;
}
return false;
}
function translate(str) {
if (isVowel(str[0])){
str = str + "way";
}
else {
var i = 1;
while (!isVowel(str[i])){
i++;
}
str = str.slice(i) + str.slice(0, i) + "ay";
}
return str;
}
str = translate("consonant");
DNA Pairing
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 = [];
Array.from(str).forEach(function(ch){
if (ch==='A'){
arr.push(['A', 'T']);
}
if (ch==='T'){
arr.push(['T', 'A']);
}
if (ch==='C'){
arr.push(['C', 'G']);
}
if (ch==='G'){
arr.push(['G', 'C']);
}
});
return arr;
}
pair("GCG");
高端寫法:
function pair(str) {
var obj = {'A':'T','T':'A','G':'C','C':'G'};
return str.split('').map(e => [e,obj[e]]);
}
pair("GCG");
Missing letters
從傳遞進(jìn)來(lái)的字母序列中找到缺失的字母并返回它。
如果所有字母都在序列中,返回 undefined。
如果你被卡住了,記得開(kāi)大招 Read-Search-Ask。嘗試與他人結(jié)伴編程、編寫你自己的代碼。
這是一些對(duì)你有幫助的資源:
function fearNotLetter(str) {
var norm = str[0].charCodeAt();
for (var i=1; i<str.length; i++){
var code = str[i].charCodeAt();
norm++;
if (code!==norm){
return String.fromCharCode(norm);
}
}
return undefined;
}
fearNotLetter("abce");
Boo who
檢查一個(gè)值是否是基本布爾類型,并返回 true 或 false。
基本布爾類型即 true 和 false。
function boo(bool) {
// What is the new fad diet for ghost developers? The Boolean.
return typeof bool === 'boolean';
}
str = boo(true);
console.log(str);
Sorted Union
寫一個(gè) function,傳入兩個(gè)或兩個(gè)以上的數(shù)組,返回一個(gè)以給定的原始數(shù)組排序的不包含重復(fù)值的新數(shù)組。
換句話說(shuō),所有數(shù)組中的所有值都應(yīng)該以原始順序被包含在內(nèi),但是在最終的數(shù)組中不包含重復(fù)值。
非重復(fù)的數(shù)字應(yīng)該以它們?cè)嫉捻樞蚺判?,但最終的數(shù)組不應(yīng)該以數(shù)字順序排序。
function unite(arr1, arr2, arr3) {
var args = arguments;
for (var i=1; i<args.length; i++){
for (var j=0; j<args[i].length; j++){
if (arr1.indexOf(args[i][j]) === -1){
arr1.push(args[i][j]);
}
}
}
return arr1;
}
unite([1, 3, 2], [5, 2, 1, 4], [2, 1]);
Convert HTML Entities
將字符串中的字符 &、<、>、" (雙引號(hào)), 以及 ' (單引號(hào))轉(zhuǎn)換為它們對(duì)應(yīng)的 HTML 實(shí)體。
function convert(str) {
// :)
str = str.replace(/&/g, '&');
str = str.replace(/</g, '<');
str = str.replace(/>/g, '>');
str = str.replace(/"/g, '"');
str = str.replace(/'/g, ''');
return str;
}
convert("Dolce & Gabbana");
Spinal Tap Case
將字符串轉(zhuǎn)換為 spinal case。Spinal case 是 all-lowercase-words-joined-by-dashes 這種形式的,也就是以連字符連接所有小寫單詞。
如果你被卡住了,記得開(kāi)大招 Read-Search-Ask。嘗試與他人結(jié)伴編程、編寫你自己的代碼。
這是一些對(duì)你有幫助的資源:
function spinalCase(str) {
// "It's such a fine line between stupid, and clever."
// --David St. Hubbins
return str.replace(/[\s_]/g, '-')
.replace(/([a-z])([A-Z])/g, '$1-$2')
.toLowerCase();
}
str = spinalCase("thisIsSpinalTap");
console.log(str);
使用正則表達(dá)式。
tips1: 思路,先把空格和下劃線換成-;再把相鄰的小寫和大寫字母之間加上-;最后全部轉(zhuǎn)為小寫。
tips2:第二部匹配相鄰的小寫和大寫字母時(shí),不能寫成/[a-z][A-Z]/g,否則:
str = spinalCase("thisIsSpinalTap");
\\輸出 thi$1-$2$1-$2pina$1-$2ap
參考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp
(x):匹配 x 并且捕獲匹配項(xiàng)。 這被稱為捕獲括號(hào)(capturing parentheses)。
也就是說(shuō),想用9,必須得有()。
Sum All Odd Fibonacci Numbers
給一個(gè)正整數(shù)num,返回小于或等于num的斐波納契奇數(shù)之和。
斐波納契數(shù)列中的前幾個(gè)數(shù)字是 1、1、2、3、5 和 8,隨后的每一個(gè)數(shù)字都是前兩個(gè)數(shù)字之和。
例如,sumFibs(4)應(yīng)該返回 5,因?yàn)殪巢{契數(shù)列中所有小于4的奇數(shù)是 1、1、3。
提示:此題不能用遞歸來(lái)實(shí)現(xiàn)斐波納契數(shù)列。因?yàn)楫?dāng)num較大時(shí),內(nèi)存會(huì)溢出,推薦用數(shù)組來(lái)實(shí)現(xiàn)。
function sumFibs(num) {
var sum;
if (num <= 2){
sum = num;
}
else {
var fibPre = 1;
var fibNext = 2;
sum = 2;
while (fibNext <= num){
if (fibNext%2 !== 0){
sum += fibNext;
}
var temp = fibNext + fibPre;
fibPre = fibNext;
fibNext = temp;
console.log("fib"+fibNext);
}
}
return sum;
}
str = sumFibs(1000);
console.log(str);
Sum All Primes
求小于等于給定數(shù)值的質(zhì)數(shù)之和。
只有 1 和它本身兩個(gè)約數(shù)的數(shù)叫質(zhì)數(shù)。例如,2 是質(zhì)數(shù),因?yàn)樗荒鼙?1 和 2 整除。1 不是質(zhì)數(shù),因?yàn)樗荒鼙蛔陨碚?/p>
給定的數(shù)不一定是質(zhì)數(shù)。
function isPrime(num){
if (num<=1){
return false;
}
for (var i=2; i<=Math.pow(num, 0.5); i++){
if (num % i === 0){
return false;
}
}
return true;
}
function sumPrimes(num) {
var sum = 0;
for (var i=2; i<=num; i++) {
if (isPrime(i)){
sum += i;
}
}
return sum;
}
str = sumPrimes(10);
console.log(str);
Smallest Common Multiple
找出能被兩個(gè)給定參數(shù)和它們之間的連續(xù)數(shù)字整除的最小公倍數(shù)。
范圍是兩個(gè)數(shù)字構(gòu)成的數(shù)組,兩個(gè)數(shù)字不一定按數(shù)字順序排序。
例如對(duì) 1 和 3 —— 找出能被 1 和 3 和它們之間所有數(shù)字整除的最小公倍數(shù)。
function biggestFactor(a, b){
while (b%a !== 0){
var temp = b % a;
b = a;
a = temp;
}
return a;
}
function smallestCommons(arr) {
if (arr[0] > arr[1]){
var temp = arr[0];
arr[0] = arr[1];
arr[1] = temp;
}
var commons = arr[0];
for(var i=arr[0]+1; i<=arr[1]; i++){
commons = commons * i / biggestFactor(commons, i);
}
return commons;
}
str = smallestCommons([5,1]);
console.log(str);
Finders Keepers
寫一個(gè) function,它遍歷數(shù)組 arr,并返回?cái)?shù)組中第一個(gè)滿足 func 返回值的元素。舉個(gè)例子,如果 arr 為 [1, 2, 3],func 為 function(num) {return num === 2; },那么 find 的返回值應(yīng)為 2。
function find(arr, func) {
var num = arr.filter(func)[0];
return num;
}
str = find([1, 2, 3, 4], function(num){ return num % 2 === 0; });
console.log(str);
Drop it
隊(duì)友該賣就賣,千萬(wàn)別舍不得。
當(dāng)你的隊(duì)伍被敵人包圍時(shí),你選擇拯救誰(shuí)、拋棄誰(shuí)非常重要,如果選擇錯(cuò)誤就會(huì)造成團(tuán)滅。
如果是AD或AP,優(yōu)先拯救。
因?yàn)锳D和AP是隊(duì)伍輸出的核心。
其次應(yīng)該拯救打野。
因?yàn)榇蛞八懒藢?duì)面就可以無(wú)所顧慮地打龍。
最后才是輔助或上單。
因?yàn)檩o助和上單都是肉,死了也不會(huì)對(duì)團(tuán)隊(duì)造成毀滅性影響,該賣就賣。
但真實(shí)中的團(tuán)戰(zhàn)遠(yuǎn)比這要復(fù)雜,你的隊(duì)伍很可能會(huì)被敵人分割成2個(gè)或3個(gè)部分。
當(dāng)你救了一個(gè)重要的人時(shí),很可能其他隊(duì)友也會(huì)因此獲救。
舉個(gè)例子:
輔助和AD經(jīng)常是在一起的,打野和中單在一起,上單經(jīng)常一個(gè)人。
你救了AD,輔助也經(jīng)常因此獲救。
讓我們來(lái)丟棄數(shù)組(arr)的元素,從左邊開(kāi)始,直到回調(diào)函數(shù)return true就停止。
第二個(gè)參數(shù),func,是一個(gè)函數(shù)。用來(lái)測(cè)試數(shù)組的第一個(gè)元素,如果返回fasle,就從數(shù)組中拋出該元素(注意:此時(shí)數(shù)組已被改變),繼續(xù)測(cè)試數(shù)組的第一個(gè)元素,如果返回fasle,繼續(xù)拋出,直到返回true。
最后返回?cái)?shù)組的剩余部分,如果沒(méi)有剩余,就返回一個(gè)空數(shù)組。
function drop(arr, func) {
// Drop them elements.
var empty = [];
for (var i=0; i<arr.length; i++){
if (func(arr[i])){
return arr.slice(i);
}
}
return empty;
}
str = drop([1, 2, 3, 4], function(n) {return n >= 3;});
console.log(str);
Steamroller
對(duì)嵌套的數(shù)組進(jìn)行扁平化處理。你必須考慮到不同層級(jí)的嵌套。
function steamroller(arr) {
// I'm a steamroller, baby
var retArr = [];
arr.forEach(function(item){
if (Array.isArray(item)){
retArr = retArr.concat(steamroller(item));
}
else{
retArr.push(item);
}
});
return retArr;
}
str = steamroller([1, [2], [3, [[4]]]]);
console.log(str);
Binary Agents
傳入二進(jìn)制字符串,翻譯成英語(yǔ)句子并返回。
二進(jìn)制字符串是以空格分隔的。
如果你被卡住了,記得開(kāi)大招 Read-Search-Ask。嘗試與他人結(jié)伴編程、編寫你自己的代碼。
這是一些對(duì)你有幫助的資源:
function binaryAgent(str) {
var arr = str.split(' ');
var retStr = "";
arr.forEach(function(item){
retStr += String.fromCharCode(parseInt(item, 2));
});
return retStr;
}
str = binaryAgent("01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111");
console.log(str);
傳入二進(jìn)制字符串,翻譯成英語(yǔ)句子并返回。
二進(jìn)制字符串是以空格分隔的。
Everything Be True
所有的東西都是真的!
完善編輯器中的every函數(shù),如果集合(collection)中的所有對(duì)象都存在對(duì)應(yīng)的屬性(pre),并且屬性(pre)對(duì)應(yīng)的值為真。函數(shù)返回ture。反之,返回false。
記?。耗阒荒芡ㄟ^(guò)中括號(hào)來(lái)訪問(wèn)對(duì)象的變量屬性(pre)。
提示:你可以有多種實(shí)現(xiàn)方式,最簡(jiǎn)潔的方式莫過(guò)于Array.prototype.every()。
function every(collection, pre) {
// Is everyone being true?
return collection.every(function(obj){
return obj[pre];
});
}
str = every([{"user": "Tinky-Winky", "sex": "male"}, {"user": "Dipsy", "sex": "male"}, {"user": "Laa-Laa", "sex": "female"}, {"user": "Po", "sex": "female"}], "sex");
console.log(str);
Arguments Optional
創(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。
如果你被卡住了,記得開(kāi)大招 Read-Search-Ask。嘗試與他人結(jié)伴編程、編寫你自己的代碼。
這是一些對(duì)你有幫助的資源:
function add() {
if (arguments.length === 1){
if (typeof(arguments[0]) !== "number"){
return undefined;
}
else{
var arg0 = arguments[0];
return function(num){
if (typeof(arguments[0]) !== "number"){
return undefined;
}
else {
return num + arg0;
}
};
}
}
else if (arguments.length === 2){
if (typeof(arguments[0]) !== "number" || typeof(arguments[1]) !== "number"){
return undefined;
}
else {
return arguments[0] + arguments[1];
}
}
return undefined;
}
str = add(3)(4);
console.log(str);
js檢測(cè)數(shù)字:https://blog.csdn.net/sinat_26521835/article/details/79527169