发现一个很好的练习做题网站 Codewars
都是自己做过的,先放自己的答案,再放自己觉得不错的其他回答。
1. 将首字母放到后面并加上ay
pigIt('This is my string')
转换成:pigIt('hisTay siay ymay tringsay')
-
mine
function pigIt(str){ var _str = []; str.split(' ').forEach((_value) => _str.push(_value.slice(1)+_value.slice(0,1)+'ay')); return _str.join(' '); }
-
others
function pigIt(str){ return str.replace(/(\w)(\w*)(\s|$)/g, "\$2\$1ay\$3") }
2. 数组变成字符串并且最后一个用&连接
list([{name: 'Bart'},{name: 'Lisa'},{name: 'Maggie'},{name: 'Homer'},{name: 'Marge'}])
转换成:'Bart, Lisa, Maggie, Homer & Marge'
-
mine
function list(names){ if(names.length == 0)return ''; let allname = []; names.forEach(function(_value){ allname.push(_value.name); }); let list = allname.join(","); var _index = list.lastIndexOf(","); list = list.replace(/,/g,function(a,b){ return b == _index ? ' & ' : ', ' }); return list; }
-
others
function list(names) { var xs = names.map(p => p.name) var x = xs.pop() return xs.length ? xs.join(", ") + " & " + x : x || "" }
3. 将0移到数组后面且其他值在原来位置不排序
["a",0,"b",null,"c",0,"d",1,false,1,0,3,[],1,9,{},9,0]
转换成:["a","b",null,"c","d",1,false,1,3,[],1,9,{},9,0,0,0,0]
-
mine
var moveZeros = function (arr) { let my_arr = arr.concat(); let count = 0; arr.forEach(function(_value,_index){ if(_value === 0){ my_arr.push(...my_arr.splice(_index-count,1)); count++; } }); return my_arr; }
-
others
var moveZeros = function (arr) { return arr.filter(function(x) {return x !== 0}).concat(arr.filter(function(x) {return x === 0;})); }
4. 数组内奇数排序,偶数位置不变
[5, 3, 2, 8, 1, 4]
转换成:[1, 3, 2, 8, 5, 4]
-
mine
function sortArray(arr) { var myarr = [], myindex = []; arr.map(function(a,b){ if(a%2 !== 0){ console.log(a) myarr.push(a); myindex.push(b); } }); myarr.sort((a,b) => a - b); myindex.map(function(a,b){ arr[a] = myarr[b]; }); return arr; }
-
others
function sortArray(array) { const odd = array.filter((x) => x % 2).sort((a,b) => a - b); return array.map((x) => x % 2 ? odd.shift() : x); }
5. 字符串里面的数字排序
"is2 Thi1s T4est 3a"
转换成:"Thi1s is2 3a T4est"
-
mine
function order(words){ var arr = words.split(' '); arr.sort(function(a,b){ return /\d/.exec(a)[0] - /\d/.exec(b)[0]; }); return arr.join(' '); }
-
others
function order(words){ return words.split(' ').sort(function(a, b){ return a.match(/\d/) - b.match(/\d/); }).join(' '); }
6. 拆分数字并相乘直至个位数
给出参数39
拆分:3*9 = 27, 2*7 = 14, 1*4=4
(返回执行次数:三次)
-
mine
function persistence(num) { var count = 0; var Count = function(_num){ var total = 1; if(_num.toString().length == 1){ return count; } total = _num.toString().split('').map((a) => total = total * a).pop(); count++; return Count(total); } return Count(num); }
-
others
const persistence = num => { return `${num}`.length > 1 ? 1 + persistence(`${num}`.split('').reduce((a, b) => (a * b))) : 0; }
7. 匹配密码
六位以上密码,至少一个数字、一个大写字母、一个小写字母
-
mine
function validate(password) { return /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])\w{6,}$/.test(password); }
-
others
function validate(password) { return /^[A-Za-z0-9]{6,}$/.test(password) && /[A-Z]+/ .test(password) && /[a-z]+/ .test(password) && /[0-9]+/ .test(password) ; }