1.判断一个单词是否是回文
function isPalindrome(str) {
return str === str.split('').reverse().join('')
}
isPalindrome('neveroddoreven') // true
2.数组去重
ES5
方法1:利用indexOf去重
function uniqueArr1(arr) {
// 如果传入的不是数组,错误提示
if (!Array.isArray(arr)) {
console.log('type error')
return false
}
// 如果是数组,开始操作
let array = []
for (let i = 0; i < arr.length; i++) {
if (array.indexOf(arr[i]) === -1) {
array.push(arr[i])
}
}
return array
}
let arr = [1, 2, 3, 3, 4, 'a', 'b', 'b', 'q']
console.log(uniqueArr1(arr)) // [ 1, 2, 3, 4, 'a', 'b', 'q' ]
方法2:利用嵌套for循环和splice去重
function uniqueArr2(arr) {
// 如果传入的不是数组,错误提示
if (!Array.isArray(arr)) {
console.log('type error')
return false
}
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
// 第一个等同于第二个,splice方法删除第二个
if (arr[i] === arr[j]) {
arr.splice(j, 1)
j--
}
}
}
return arr
}
let arr = [1, 2, 3, 3, 4, 'a', 'b', 'b', 'q']
console.log(uniqueArr2(arr)) // [ 1, 2, 3, 4, 'a', 'b', 'q' ]
ES6
方法3:利用Set集合的唯一性去重
function uniqueArr3(arr) {
return Array.from(new Set(arr))
}
let arr = [1, 2, 3, 3, 4, 'a', 'b', 'b', 'q']
console.log(uniqueArr3(arr)) // [ 1, 2, 3, 4, 'a', 'b', 'q' ]
3.统计字符串中出现最多的字母及其出现的次数
function repeatedStr(str) {
// 用一个新对象的value值去当作次数
let json = {}
for (let i = 0; i < str.length; i++) {
if (!json[str.charAt(i)]) {
json[str.charAt(i)] = 1
} else {
json[str.charAt(i)]++
}
}
let iMax = 0 // 次数
let iKey = '' // 出现最多的字母
// 遍历对象,找到出现次数最多的字母以及出现的次数
for (let key in json) {
if (json[key] > iMax) {
iMax = json[key]
iKey = key
}
}
console.log('出现次数最多的是:' + iKey + ',出现' + iMax + '次')
}
repeatedStr('abcccccccccccbbbqqoo') // 出现次数最多的是:c,出现11次
4.计算一个整数的阶乘
function factorialize(num) {
if (num < 1) {
return 1
}
return num > 1 ? num * factorialize(num - 1) : 1;
}
console.log(factorialize(3)) // 6
5.冒泡排序(从小到大)
function bubbleSort(arr) {
for (let i = 0; i < arr.length - 1; i++) {
for (let j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
let temp = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = temp
}
}
}
return arr
}
let arr = [1, 2, 20, 8, 12, 5]
console.log(bubbleSort(arr)) // [ 1, 2, 5, 8, 12, 20 ]
6.最高效的数组乱序方法
function randomSort(arr) {
return arr.sort((a, b) => { return Math.random() > 0.5 ? -1 : 1; });
}
7.找出正数数组的最大差值
function getMaxDifference(arr) {
let min = arr[0]
let max = 0
for (let i = 0; i < arr.length; i++) {
min = Math.min(min, arr[i])
max = Math.max(max, arr[i])
}
return max - min
}
let arr = [1, 2, 20, 8, 12, 5]
console.log(getMaxDifference(arr)) // 19
8.随机生成指定长度的字符串
function getRandomStr(n) {
let str = 'abcdefghijklmnopqrstuvwxyz9876543210'
let result = ''
let length = str.length
for (let i = 0; i < n; i++) {
result += str.charAt(Math.floor(Math.random() * length))
}
return result
}
9.找出最长的单词
网上的大部分方法如果遇到有两个或两个以上相同长度的单词,都只能找到第一个,此处是改进后的方法,可以找到多个长度最长的单词
function findLongestWord(str) {
let newStr = str.split(' ')
let result = []
let maxLength = 0
// 遍历词组
for (let i = 0; i < newStr.length; i++) {
// 如果找到长度更大的,就清空数组,重新push
if (newStr[i].length > maxLength) {
result = []
result.push(newStr[i])
maxLength = newStr[i].length
} else if (newStr[i].length === maxLength) { // 如果找到长度相同的,就直接push进去
result.push(newStr[i])
maxLength = newStr[i].length
}
}
return result.join(',')
}
findLongestWord('my name is bigx') // name,bigx
10.string里每个单词的首字母大写
方法1:
function titleCase1(str) {
return str.toLowerCase().split(" ").map((item)=>{
return item.replace(item[0], item[0].toUpperCase())
}).join(" ")
}
titleCase1('a little dog') // A Little Dog
方法2:
function titleCase2(str) {
let arr = str.split(' ')
for (let i = 0; i < arr.length; i++) {
arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].slice(1)
}
return arr.join(' ')
}
titleCase2('a little dog') // A Little Dog
11.判断字符串是否以制定的字符串结尾
function confirmEnding(str, target) {
return !!(str.slice(-target.length) === target)
}
console.log(confirmEnding('He has a new boyfriend', 'boyfriend')) // true
12.截断字符串
function truncate(str, num) {
if (num >= str.length) return str
if (num <= 3) return str.slice(0, num) + "..."
if (str.length > num) return str.slice(0, num-3) + "..."
}
console.log(truncate('Absolutely Longer', 8)) // Absol...
13.判断一个字符串是否是某个字符串的子集
方法1:利用indexOf方法
function isInclude1(str1, str2) {
return (str1.indexOf(str2) !== -1)
}
console.log(isInclude1('aaaaccceer', 'ac')) // true
方法2:利用search方法
function isInclude2(str1, str2) {
return (str1.search(str2) !== -1)
}
console.log(isInclude2('aaaaccceer', 'ac')) // true
方法3:利用正则表达式
function isInclude(str1, str2) {
let reg = new RegExp(str2, 'g')
return !!str1.match(str2)
}
console.log(isInclude('aaaaccceer', 'ac')) // true
方法4:上面的方法只适用于str2整体包含于str1,如果是要判断str2中的每一个字符都包含于str1呢?可以通过遍历来实现
function isInclude(str1, str2) {
// 将传入的两个字符串分别转成数组
let _str1 = str1.split("")
let _str2 = str2.split("")
// 遍历子数组,通过indexOf方法判断子数组的每一个字符是否属于父数组,如果有一个不属于就返回false
for(let i = 0; i < _str2.length; i++){
if(_str1.indexOf(_str2[i]) == -1) {
return false
}
}
return true
}
console.log(isInclude('hello', 'eo')) // true
14. 统计字符串中每个字符出现的次数
function count(str) {
// 先去除字符串的空格,并将其转换成数组
let arr = str.replace(/\s*/g, '').split('')
// 创建一个新对象用于统计字符出现的次数
let result = {}
// 遍历字符数组
arr.forEach(item => {
if (result[item] === undefined) {
result[item] = 1
} else {
result[item] += 1
}
})
return result
}
let str = 'hello world'
console.log(count(str)) // {h: 1, e: 1, l: 3, o: 2, w: 1, r: 1, d: 1}
15. 判断是否为数组
方法1:instanceof
由于此方法用于判断一个数组是否为对象的时候也会返回true,所以不推荐使用
function isArray(arr) {
return arr instanceof Array
}
let arr1 = []
console.log(isArray(arr1)) // true
方法2:原型prototype + toString + call
此方法最为准确
function isArray(arr) {
return Object.prototype.toString.call(arr) === '[object Array]'
}
let arr1 = []
console.log(isArray(arr1)) // true
方法3:isArray方法
let arr1 = []
console.log(Array.isArray(arr1)) // true