一 字符串新增方法实现功能
给字符串对象定义一个addPrefix函数,当传入一个字符串str时,他会返回新的带有指定前缀的字符串,例如:
console.log("world".addPrefix("hello"))
控制台会输出“hello world”
String.prototype.addPrefix = function(str){
return str + ' ' +this
}
console.log("world".addPrefix("hello")) // hello world
二 求100以内的质数
质数只能被自己和1整除
let count;
for(let i = 2; i < 100; i++){
for(let j = 1; j <= i; j++){
if(i % j === 0){
count++
}
}
//从1开始,到自身都被%完,1自身整除,count===2
if(count===2){
console.log(i)
}
count = 0
}
三 在一个数组中找到两个数的和为目标值的数,并且返回它们的下标
let nums = [2, 8, 7, 11]
let nums1 = [2, 8, 7, 11, 1]
let target = 9
function twoSum(nums, target){
for(let i = 0; i < nums.length; i++){
let num = nums[i]
let targetIndex = nums.indexOf(target - num)
//存在,且不只一个数
if(targetIndex > -1 && targetIndex !== 1){
return [i, targetIndex]
}
}
}
console.log(twoSum(nums, target)); //[ 0, 2 ]
//该方法有bug,只能找到一组
console.log(twoSum(nums, target)); //[ 0, 2 ]
四 数组随机排序
1 sort()+Math.random() 物质范围[0, 1)
var arr = [1, 2, 3, 4, 5]
arr.sort(function () {
return Math.random() - 0.5
})
console.log(arr);
sort运行机制是两个数两个数的比较,缺点不够随机
2 循环+Math.random() 随机下标,两数交换位置
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
function randomArr(arr){
for(let i = 0; i < arr.length; i++){
//获取随即下标准
let randomIndex = parseInt(Math.random() * arr.length);
//存下当前数值
let curNum = arr[i]
//交换两个值
arr[i] = arr[randomIndex]
arr[randomIndex] = curNum
}
return arr
}
console.log(randomArr(arr));
3 洗牌算法
五 数组扁平化
数组的扁平化其实就是将一个嵌套多层的数组 array(嵌套可以是任何层数)转换为只有一层的数组
1 ES6 数组新增flat API
var arr = [1, [2, [3, 4, 5]]];
// 参数为想要扁平化的数组的嵌套层数,Infinity参数为无论嵌套多少层,都转化为一维数组
const newArr1 = arr.flat(1)
const newArr2 = arr.flat(Infinity)
console.log(newArr1) //[ 1, 2, [ 3, 4, 5 ] ]
console.log(newArr2) //[ 1, 2, 3, 4, 5 ]
2 循环+concat()
var arr = [1, [2, [3, 4, 5]]];
const flattern = function(arr){
while(arr.some(value=>Array.isArray(value))){
arr = [].concat(...arr);
}
return arr;
}
console.log(flattern(arr))
3 递归+concat()
var arr = [1, [2, [3, 4, 5]]];
const flattern = function(arr){
return [].concat(...arr.map(v=>Array.isArray(v)?flattern(v):v))
}
console.log(flattern(arr))
六 求多维数组最大值
大数组中包含了4个小数组,分别找到每个小数组中的最大值,然后把它们组成为一个新数组
let arr = [[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]
function fnArr(arr){
let newArr = []
arr&&arr.map(item=>{
newArr.push(Math.max(...item))
})
return newArr
}
console.log(fnArr(arr)) //[ 5, 27, 39, 1001 ]
七 找出字符串出现最多次数的字符以及次数
判断一个字符串中出现次数最多的字符,并统计次数
let str = 'aaabbbcccaaabbbaaabbbbbbbbbbb'
let str = 'aaabbbcccaaabbbaaabbbbbbbbbbb';
let obj = {};
for(let i = 0; i < str.length; i++){
let char = str.charAt(i);
//如果有该元素,次数+1
if(obj[char]){
obj[char]++;
}else{
obj[char] = 1;
}
}
console.log(obj) // { a: 9, b: 17, c: 3 }
//获取最大值
let max = 0;
for(let key in obj){
if(max < obj[key]){
max = obj[key]
}
}
console.log(max) // 17
八 提取url的参数
let url = "https://www.bilibili.com/video/BV1ZZ421h79b?p=5&spm_id_from=pageDriver&vd_source=28c6dd538bc85e3a1569928075bbb887"
function queryURLParams(URL){
let url = URL.split("?")[1];
const urlSearchParams = new URLSearchParams(url);
const params = Object.fromEntries(urlSearchParams.entries());
return params;
}
console.log(queryURLParams(url));
// {
// p: '5',
// spm_id_from: 'pageDriver',
// vd_source: '28c6dd538bc85e3a1569928075bbb887'
// }