JavaScript中常考小问题集锦

本文介绍了多种实用的字符串和数组操作方法,包括回文字符串判断、字符串翻转、统计字符出现频率、数组去重及最大差值计算。通过具体代码示例,详细解析了每种方法的实现原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、判断回文字符串

回文字符串:如果一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样,那么这个字符串就是回文(palindrome)。
1⃣️递归的方法

function palindrome(str){
	var lowerStr = str.toLowerCase().replace(/\W/g,"");
	if(lowerStr.length==0) return true;
	if(lowerStr[0]!=lowerStr[lowerStr.length-1]) return false;
	return palindrome(lowerStr.slice(1,lowerStr.length-1));
}

2⃣️利用字符串翻转的方法;

function palindrome(str){
	var lowerStr = str.toLowerCase().replace(/\W/g,"");
    var reverseStr = lowerStr.split("").reverse().join("");
    if(lowerStr==reverseStr) return true;
    return false;
}
2、翻转字符串

1⃣️反向遍历字符串

function reverseString(str){
    var result = "";
    for(var i=0;i<str.length;i++){
        result += str[i];
    }
    return result;
}

2⃣️转换为数组进行操作

function reverseString2(str){
    return str.split("").reverse().join("");
}
3、统计字符串中出现次数最多的字符

1⃣️遍历字符串,计算每个字符串出现的次数,保存在数组中,找到数组中的最大值,则其在字符串中的位置即字符串中出现次数最多的字符在字符串中的位置

function findMaxDuplicateChar(str){
    var len = str.length;
    if(len<2) return str;
    var arr = new Array(len);
    arr.fill(0);
    for(var i=0;i<len;i++){
        var index = str.indexOf(str[i]);
        arr[index]++;
    }
    var max = arr[0];
    for(var i=1;i<len;i++){
        max = arr[i]>max ? arr[i] : max;
    }
    // 	可能存在多个字符串出现次数相同的情况
    var result = [];
    arr.map(function(item, index, arr){
        if(item==max){
            result.push(str[index]);
        }
    });
    return result;
}

2⃣️使用对象保存每个字符串出现的次数,key为字符,value为字符出现的次数,最后遍历数组,找到出现最多次的字符和次数

function findMaxDuplicateChar2(str){
    var len = str.length;
    if(len<2) return str;
    var obj = {};
    for(var i=0;i<len;i++){
        if(obj[str[i]]){
            obj[str[i]]++;
        }else {
            obj[str[i]] = 1;
        }
    }
    var maxKey = obj[str[0]];
    // 	可能存在多个字符串出现次数相同的情况
    for(var key in obj){
        if(obj[key]>obj[maxKey]){
            delete obj[maxKey];
            maxKey = key;
        }else if(obj[key]<obj[maxKey]){
            delete obj[key];
        }
    }
    return obj;
}
4、数组去重

1⃣️遍历数组

function unique(arr){
	var obj = {};
	var result = [];
	for(var i=0;i<arr.length;i++){
		if(!obj[arr[i]]){
			obj[arr[i]] = true;
			result.push(arr[i]);
		}
	}
	return result;
}

2⃣️利用数组的filter方法

function unique(arr){
	return arr.filter(function(item, index, arr){
		return arr.indexOf(item)===index;
	});
}
5、数组中的最大差值

1⃣️遍历数组,找到最大值和最小值,计算差值

function getMaxGap(arr){
	var min = arr[0], max = arr[0];
	for(var i=0;i<arr.length;i++){
		min = arr[i]>min ? min : arr[i];
		max = arr[i]>max ? arr[i] : max;
	}
	return max-min;
}

2⃣️利用Math.max和Math.min分别找到数组中的最大值和最小值,然后计算差值

function getMaxGap(arr){
	var min = Math.min.apply(null, arr);
	var max = Math.max.apply(null, arr);
	return max-min;
}
6、不借助临时变量,进行两个整数的交换
function swap(a, b){
	b = b-a;
	a = a+b;
	b = a-b;
}
7、实现类似getElementsByClassName的功能

不使用元素提供的getElementsByClassName和querySelectorAll等方法

function queryClassName(node, className){
   var elements = [];
    var nodes = node.getElementsByTagName("*");
    for(var i=0;i<nodes.length;i++){
        // 元素可能存在多个class
        var classNames = nodes[i].className.split(" ");
        var j = classNames.length;
        while(j--){
            if(classNames[j]==className){
                elements.push(nodes[i]);
                break;
            }
        }
    }
    return elements;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值