記錄一些js面試題,解法,感悟。
1.將字串"aaaabbbbcccc"轉換"4a4b4c"
- 解法1
var str = "aaaabbbbcccc"
var reg = /([a-z])\1+/ig
var newStr = str.replace(reg,function(item){
return item.length+item[0]
})
console.log(newStr)
複製程式碼
- 解法2
var str = "aaaabbbbcccc"
var newStr = ""
var num = 1
for(var i=0;i<str.length;i++){
if((str[i]==str[i+1])){
num++
}else{
newStr=newStr + num + str[i]
num=1
}
}
複製程式碼
1.將字串"4a4b4c"轉換"aaaabbbbcccc"
- 解法1
var str = "4a4b4c"
var reg = /(\d+)([a-z])/ig
var newStr = str.replace(reg,function(item){
item.match(reg)
var str = ""
for(var i=0;i<parseInt(RegExp.$1);i++){
str+=RegExp.$2
}
return str
})
console.log(newStr)
複製程式碼
- 解法2
var str = "4a4b4c"
var newStr = ""
var mark = 0
for(var i=0;i<str.length;i++){
if(str[i]>'9'){
var s = str.slice(mark,i+1)
for(var j=0;j<parseInt(s);j++){
newStr+=s[s.length-1]
}
mark=i+1
}
}
複製程式碼
2.統計字串"aaaabbbbcccc"中各個字元出現的次數,比如a出現4次,b出現了4次,c出現了4次
- 解法1
var str = "aaaabbbbcccc"
var reg = /([a-z])\1+/ig
var newStr = ""
str.replace(reg,function(item){
newStr+=item[0]+'出現了'+item.length+'次,'
})
console.log(newStr)
複製程式碼
- 解法2
var str = "aaaabbbbcccc"
var newStr = ""
var obj = {}
for(var i=0;i<str.length;i++){
if(obj[str[i]]){
obj[str[i]]++
}else{
obj[str[i]]=1
}
}
console.log(obj)
複製程式碼
3.[1,4,2,4,2,4,1,2]陣列排序
- 解法1 一般排序
var arr = [1,4,2,4,2,4,1,2]
for(var i=0;i<arr.length;i++){
for(var j=i+1;j<arr.length;j++){
if(arr[j]>arr[i]){
var m = arr[i]
arr[i] = arr[j]
arr[j] = m
}
}
}
console.log(arr)
複製程式碼
- 解法2 氣泡排序
var arr = [1,4,2,4,2,4,1,2]
for(var i=0;i<arr.length;i++){
for(var j=0;j<arr.length-i-1;j++){
if(arr[j]>arr[j+1]){
var m = arr[j]
arr[j] = arr[j+1]
arr[j+1] = m
}
}
}
console.log(arr)
複製程式碼
- 解法3 快速排序(二分排序)
var arr = [1,4,2,4,2,4,1,2]
function quickSrot(arr) {
if (arr.length <= 1) {
return arr
}
var middleIndex = Math.floor(arr.length / 2)
var middle = arr[middleIndex]
var left = []
var right = []
for (var i = 0; i < arr.length; i++) {
if (arr[i] <= middle) {
left.push(arr[i])
} else {
right.push(arr[i])
}
}
if (left.length == arr.length) {
left.splice(middleIndex,1)
right.push(middle)
}
if (right.length == arr.length) {
right.splice(middleIndex,1)
left.push(middle)
}
return quickSrot(left).concat(quickSrot(right))
}
quickSrot(arr)
複製程式碼
處理字串還是用正則比較方便,當然用迴圈也是可以的。 ing。。。