遞迴練習題目
阿新 • • 發佈:2018-12-19
練習題目
- 寫一個函式,接受一串字串,返回一個字串,這個字串是將原來字串倒過來。
- 寫一個函式,接受一串字串,同時從前後開始拿一位字元對比,如果兩個相等,返回
true
,如果不等,返回false
。 - 編寫一個函式,接受一個數組,返回扁平化新陣列。
- 編寫一個函式,接受一個物件,這個物件值是偶數,則讓它們相加,返回這個總值。
- 編寫一個函式,接受一個物件,返回一個數組,這個陣列包括物件裡所有的值是字串
參考答案
參考1
function reverse(str) { if(str.length <= 1) return str; return reverse(str.slice(1)) + str[0]; } reverse('abc') 複製程式碼
參考2
function isPalindrome(str){
if(str.length === 1) return true;
if(str.length === 2) return str[0] === str[1];
if(str[0] === str.slice(-1)) return isPalindrome(str.slice(1,-1))
return false;
}
var str = 'abba'
isPalindrome(str)
複製程式碼
參考3
function flatten (oldArr) { var newArr = [] for(var i = 0; i < oldArr.length; i++){ if(Array.isArray(oldArr[i])){ newArr = newArr.concat(flatten(oldArr[i])) } else { newArr.push(oldArr[i]) } } return newArr; } flatten([1,[2,[3,4]],5]) 複製程式碼
參考4
function nestedEvenSum(obj, sum=0) { for (var key in obj) { if (typeof obj[key] === 'object'){ sum += nestedEvenSum(obj[key]); } else if (typeof obj[key] === 'number' && obj[key] % 2 === 0){ sum += obj[key]; } } return sum; } nestedEvenSum({c: 4,d: {a: 2, b:3}}) 複製程式碼
參考5
function collectStrings(obj) {
let newArr = []
for (let key in obj) {
if (typeof obj[key] === 'string') {
newArr.push(obj[key])
} else if(typeof obj[key] === 'object' && !Array.isArray(obj[key])) {
newArr = newArr.concat(collectStrings(obj[key]))
}
}
return newArr
}
var obj = {
a: '1',
b: {
c: 2,
d: 'dd'
}
}
collectStrings(obj)
複製程式碼
總結
遞迴精髓是,往往要先想好常規部分是怎樣的,在考慮遞迴部分,下面是 JavaScript 遞迴常用到的方法
- 陣列:
slice
,concat
- 字串:
slice
,substr
,substring
- 物件:
Object.assign