js算法题

1、es6方法过滤掉两个数组中对象id值相等的项

function(arr1,arr2){
 return arr1.filter((item) => !arr2.find((ele) => ele.id == item.id))
}

2、判断是否回文

//如:字符串abccba,从前往后读是a-b-c-c-b-a;从后往前读也是a-b-c-c-b-a
function reserve1(str){
    return str == str.split('').reverse().join('')
}
function reserve2(str){
    var len = str.length;
    for(var i=0;i<len-1;i++){
        if(str.charAt(i)==str.charAt(len-1-i)){
            return true;
        }else{
            return false;
        }
    }
}
//console.log(reserve2('abac'))

3、数组去重

function  unique(arr){
    let newArr = []
    arr.forEach((val)=>{
        if(newArr.indexOf(val) == -1){
            newArr.push(val)
        }
    })
    return newArr
}
var arr = [1,3,4,8,1,9]
//console.log(unique(arr))

4、尾递归阶乘

function factorial(num) {
    if(num <= 1) return 1;
    return num * factorial(num - 1);

}

5、排序

//快速排序
function quickSort(arr){
    if(arr.length<=1)return arr;
    let middleIndex = Math.floor(arr.length/2)
    //console.log(middleIndex)
    let middle = arr.splice(middleIndex,1)[0]
    console.log(middle)
    let left = [],right = []
    for(var i=0;i<arr.length;i++){
        if(arr[i]>middle){
            right.push(arr[i])
        }else{
            left.push(arr[i])
        }
    }
    return quickSort(left).concat([middle],quickSort(right));
}
console.log(quickSort([2,3,1,4,6,5,9,8,7]))

//冒泡排序
function maopao(arr){
    if(arr==null || arr.length < 2 ){
        return;
    }
    for(var i=0;i<arr.length-1;i++){
        for(var j=0;j<arr.length-i-1;j++){
            if(arr[j]>arr[j+1]){
                var temp = arr[j]
                arr[j] = arr[j+1]
                arr[j+1] = temp
            }
        }
    }
    return arr
}
var arr = [89,63,78,12,458,24,76,3,49]
console.log(maopao(arr))

6、 统计字符串出现次数最多的字母

function findMoreLetter(str){
    var arr,container = {}
    arr = str.split('')
    for(var i=0;i<arr.length;i++){
        if(container[arr[i]]){
            container[arr[i]] ++
        }else{
            container[arr[i]] = 1
        }
    }
    // 通过比较找出最大的
    var maxKey = 0,maxValue = '';
    for (let k in container) {
        if(container[k] > maxKey){
            maxKey = container[k];
            maxValue = k;
        }
    }
    return maxValue+'最多出现了'+maxKey+'次'
}
var str = 'abbbuyymmckhdtgdj'
//console.log(findMoreLetter(str))

7、不借助临时变量,进行两个整数的交换

//方法一
function swap(a , b) {  
    b = b - a;//2
    a = a + b;//10
    b = a - b;//8
    return [a,b];
}
//console.log(swap(8,10))
方法二
[a,b] = [b,a]

8、找出下列正数组的最大差值

var arr2 =  [10,5,11,7,8,9]
function findMaxProfit(arr){
    var max = arr[0];
    var min  = arr[1]
    for(var i=0;i<arr.length;i++){
        if(arr[i]>max){
            max = arr[i]
        }
        if(arr[i]<min){
            max = min
        }
    }
    return max - min
}
//console.log(findMaxProfit(arr2));

9、随机生成指定长度的字符串,实现一个算法,随机生成指制定长度的字符窜 比如给定 长度 8 输出 4ldkfg9j

function randomString(n){
    let str = 'abcdefghijklmnopqrstuvwxyz9876543210';
    let temp = '';
    for(var i=0;i<n;i++){
        temp += str.charAt(Math.floor(Math.random()*str.length))
    }
    return temp
}
//console.log(randomString(10))

10、 定义一个函数 求a所有约数之和

function yueShuHe(a) {
    var sum = 0;// 累加器
    for(var i=1; i<a; i++) {
        if(a%i==0) {
            sum = sum + i;
        }
    } 
    return sum; 
}

11、输入一个3位数,求这个数的和

function sumNumber(num){
    var bai,shi,ge,sum
    bai = parseInt(num/100)
    shi = parseInt(num/10)%100
    ge = num%10
    sum = bai + ge + shi;
    return  sum;
}

12、写出代码对下列数组去重并从大到小排列{5,2,3,6,8,6,5,4,7,1,9}

function fn(arr){
    var arr1 = []
    for(var i=0;i<arr.length;i++){
        if(arr1.indexOf(arr[i])==-1){
            arr1.push(arr[i])
        }
    }
    return arr1.sort((a,b)=>{
    	if(a>b){
    		return 1
    	}else{
    		return -1
    	}
    }).join(',')
}
// var arr = [5,2,3,6,8,6,5,4,7,1,9]
// console.log(fn(arr))

13、用 js 实现随机选取 10–100 之间的 10 个数字,存入一个数组,并排序。

function randomNumberSort(len,max,min){
    var transition = max - min + 1;//这里面的加1是为了能够取到100
    var arr = []
    for(var i = 0; i < len; i++){
        var num = Math.floor(Math.random() * transition + min);
        arr.push(num)
    }
    arr = arr.sort()
    return arr;
}
console.log(randomNumberSort(10,100,10))

14、已知数组 var stringArray = [“This”, “is”, “Baidu”, “Campus”], Alert 出”This is Baidu Campus”。

var stringArray = ["This", "is", "Baidu", "Campus"]
//console.log(stringArray.join(" "))

15、已知有字符串 foo=”get-element-by-id”,写一个 function 将其转化成 驼峰表示法”getElementById”。

var foo ="get-element-by-id"
var arrFoo = foo.split('-')
for(var i=1;i<arrFoo.length;i++){
    arrFoo[i] = arrFoo[i].charAt(0).toUpperCase()+arrFoo[i].substr(1,arrFoo[i].length-1)
}
var msg = arrFoo.join('')
console.log(msg)

16、有这样一个 URL: http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e,请写一 段 JS 程序提取 URL 中的各个 GET 参数(参数名和参数个数不确定),将其按 key-value 形式返回到一个 json 结构中,如{a:’1′, b:’2′, c:”, d:’ xxx’, e:undefined}。

 function serilizeUrl(url){
    if(url.indexOf('?')==-1){
        return;
    }
    var urlObject = {};
    var urlString = url.substring(url.indexOf('?')+1)
    var urlArr = urlString.split('&')
    for(var i=0;i<urlArr.length;i++){
        var urlItem = urlArr[i]; 
        var item = urlItem.split("="); 
        urlObject[item[0]] = item[1];
    }
    return urlObject
}
// var url = 'http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e';
// console.log(serilizeUrl(url))

17、输出今天的日期,以 YYYY-MM-DD 的方式,比如今天是 2014 年 9 月 26 日,则输出 2014-09-26

function getToday(){
    var date = new Date()
    var year = date.getFullYear()
    var month = date.getMonth()+1
    month = month < 10 ? '0' + month : month
    var day = date.getDate()
    day = day < 10 ? '0' + day : day
    return `今天是${year}年${month}月${day}日`
}
//console.log(getToday())
// Console.log(undefined || 1);//值___1__ 
// Console.log(null || NaN);//值__NaN___ 
// Console.log(0 && 1);//值__0___ 
// Console.log(0 && 1 || 0);//值__0___

18、以下 js 的运行结果是什么,为什么?

var txt='hx';
function hello(){ 
    var txt; 
    fn();//world 函数名与变量名重复的时候,以函数名为主 
    var fn=function(){
        console.log('hello')
    } 
    function fn(){
        console.log('world');
    } 
    console.log(txt);//undefined 局部变量,只是声明,没有赋值 
    fn();//hello 先进行声明,后赋值,执行 fn=function(){alert('hello')} 
}
//hello();

19、把两个数组合并,并删除第二个元素。

var array1 = ['a','b','c']; 
var bArray = ['d','e','f'];
var carray = array1.concat(bArray)
carray.splice(1,1)
//console.log(carray)

20、写一个 function,清除字符串前后的空格。(兼容所有浏览器)

function trim(str){
    str.replace(/^\s+/, "").replace(/\s+$/,"");

    // if (!String.prototype.trim) { 
    //     String.prototype.trim = function() { 
    //         return this.replace(/^\s+/, "").replace(/\s+$/,""); 
    //     }}
    // }
}

var arr = new Array(1 ,3 ,5); 
arr[4]='z'; 
arr2 = arr.reverse(); 
arr3 = arr.concat(arr2);
//console.log(arr3);

21、数字转换成千分位 如:12,876,977.98

// 方法一:
function numFormat(number){
    let numArr = number.toString().split('.') //分隔小数点
    let arr = numArr[0].split('').reverse()
    let res =[];
    for(var i=0;i<arr.length;i++){
        if(i%3===0 && i!=0){
            res.push(',')
        }
        res.push(arr[i])
    }
    res = res.reverse()
    if(numArr[1]){
        res = res.join('').concat('.'+numArr[1])
    }else{
        res = res.join('')
    }
    return  res
}
 //  方法二 :
 function numFormat(number){
 	return  number.toLocaleString()
 }

22、准备一个月份反转的数组

var _date=[],dateData=["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"];
var dateDataRet = Object.assign([],dateData).reverse();
//获取当前年份 
var yearText= new Date().getFullYear();
var now  = new Date().getMonth();
for (let i=0;i<6;i++){
    if(now-i<0){
        _date.push(yearText-1+'年'+dateDataRet[Math.abs(now-i)-1]);
    }else{
        _date.push(yearText+'年'+dateData[now-i]);
    }
}
_date.reverse()
console.log(_date)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值