持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第23天,点击查看活动详情
目录
今日题
题目
实现一个isPalindrome
函数,判断传入的字符串是否为回文字符串
const str = "_Hello, OllEh "
const result = isPalindrome(str)
console.log(result)
结果:
true
分析
- 回文字符串是指在忽略标点符号,大小写和空格的前提下,正着读和反着读一模一样
- 本题中的
str
包含了大小写,所以第一步我们应该先将其统一为小写或大写 - 之后遍历
str
的时候,可以考虑用两个变量来指向头部和尾部的字母 - 比较指向头尾字母的变量是否相等来解决本题
- 这个解题思路可以使用算法中的双指针来解决
昨日题
题目
找出2个数组中的对称差:
const a1 = ["HTML",1,"CSS",2,"JavaScript","anyScript","NodeJs","done"]
const a2 = ["HTML",1,"CSS",2,"NodeJs","anyScript","done"]
结果:
["JavaScript"]
答案
function diffArr (arr1, arr2 ) {
let maxLengthArr = arr1.length > arr2.length ? arr1 : arr2
let minLengthArr = arr1.length < arr2.length ? arr1 : arr2
let result = []
for (let index = 0; index < maxLengthArr.length; index++) {
if (!minLengthArr.includes(maxLengthArr[index])) {
result.push(maxLengthArr[index])
}
}
return result
}
解析
- 本题的关键就在于怎么从
a1
中得到a2
中没有的成员"JavaScript"
- 首先我们通过判断得到传入数组中,最长的数组
maxLengthArr
和最短的数组minLengthArr
- 之后对最长的数组
maxLengthArr
进行遍历 - 在循环内判断当前的
maxLengthArr[index]
在a2
中是否也同样存在,幸好es6给我们提供了includes
方法 - 我们知道
includes
的返回结果是boolean
,所以可以通过其返回值来进行判断 - 当找到
a2
中不包含的元素后,我们就可以用result.push
将结果保存 - 题解这种写法其实不是很优雅,这里再提供针对
for
的另一种写法,采用es6的api来实现,而且不用再额外声明一个数组
return maxLengthArr.filter(item => !minLengthArr.includes(item))
结语
此文章已收录至《JavaScript每日一题》专栏,如果你对本专栏有任何建议,欢迎反馈。如果你对此文章中的题目还有不懂的地方,那么请在评论区留言与大家一起讨论吧。创作不易,少年,就请留个赞再走吧!