js考题-算法篇(1)

2024-02-20 11:56:14发布
62

1. 数组去重

// 1. 用Set的方式
var arr = [1, 2, 3, 3, 4, 5, 6, 6];
console.log(Array.from(new Set(arr)));

// 2. 用includes
var newArr = [];
for (var i = 0; i < arr.length; i++) {
    var num = arr[i];
    if (!newArr.includes(num)) { // 这里也可以写成if (newArr.indexOf(num) == -1) {
        newArr.push(num)
    }
}
console.log(newArr)


2. 找出二维数组中每一项的最大值,并组成新的数组

function findMaxNum(arr) {
    var maxNumList = [];
    for (var i = 0; i < arr.length; i++) {
        var temp = 0;
        for (var j = 0; j < arr[i].length; j++) {
            var num = arr[i][j];
            if (num > temp) {
                temp = num;
            }
        }
        maxNumList.push(temp);
    }
    return maxNumList;
}


3. 统计字符串中出现最多次的字母,并且显示出现的次数

var str = 'aaaaabbbbbbbbbbbcccccccdddddddddddddddd'
var obj = {}

var arr = str.split('');
for (var i = 0; i < arr.length; i++) {
    var t = arr[i];
    if (!obj[t]) {
        obj[t] = {
            num: 1
        }
    } else {
        obj[t].num += 1
    }
}
console.log(obj)

var maxNum = 0;
var maxKey = '';
for (var i in obj) {
    if (maxNum < obj[i].num) {
        maxNum = obj[i].num
        maxKey = i
    }
}

console.log(`出现最多次数的字母是:${maxKey},它出现的次数是:${maxNum}`)


4. 深拷贝算法

function deepCopy(obj,obj2)
{
    let copyObj = obj2 || {};
    for(let key in obj)
    {
        let value = obj[key];
        
        //如果对象还包含子对象,则在调用一次自己
        if(typeof value === 'object')
        {
            copyObj[key] = {};
            arguments.callee(value,copyObj[key]);
        }
        //对象只是普通的值
        else
        {
            copyObj[key] = obj[key];
        }
        
    }
    return copyObj;
}