第一次发csdn,从事这个行业两年多了,也有很多同学也是这个行业,有一些也在大厂混的风生水起,自我认为,想要学好js这门语言,想要在js这条路上走得远,你的逻辑也是很重要的。下面的题是我自己稍微总结的,自己写了下。有一些解题思路也有点复杂。这里圈重点。如果有大神看到,请温柔点喷我。
第一题
将下划线风格的变量名转换成驼峰风格,如: 输入 alipay_first_quiz 返回 alipayFirstQuiz
注:下划线只会出现在单词中间,不会出现在开头或者结尾
function snake2camel(str) {
if(str=='' || str == undefined || str == null || str == ''){
return ''
}else{
let arr = str.split('');
let a = []
let arr1 = arr.map((el,ind) => {
if(el === '_'){
a.push(ind+1)
return el = arr[ind+1].toUpperCase()
}else{
return el
}
})
for(i=a.length-1;i>=0;i--){
arr1.splice(a[i],1)
}
return arr1.join('')
}
}
第二题
将驼峰风格的变量名转换成下划线风格,如: 输入 alipayFirstQuiz 返回 alipay_first_quiz
function camel2snake(str) {
if(str=='' || str == undefined || str == null || str == ''){
return ''
}else{
let arr = str.split('');
if(arr[0] == arr[0].toUpperCase()){
arr[0] = arr[0].toLowerCase()
}
arr1 = arr.map(el => {
if(el == el.toUpperCase()){
return '_'+el.toLowerCase();
}else{
return el;
}
})
return arr1.join('')
}
}
第三题
给出一个数组和一个整数目标值 target,你需要找出 2 个数字,他们相加之和等于目标数字,并返回这两个数字的数组下标(升序排序)
注:你可以假设给出的入参一定可以找出这样 2 个数字,并且是唯一解
注:数组中同一个数字不能使用两遍
例子:数组 [3,4,7,15] 目标 10,则 3 + 7 满足目标 10,返回他们的下标 [0, 2]
function findSum(arr, target) {
let a = []
for(i=0;i<arr.length-1;i++){
for(j=i+1;j<=arr.length-1;j++){
if(arr[i]+arr[j]==target){
a.push(i,j);
}
}
}
return a;
}
第四题
输入一个合法的 URL 返回它的 query string 解析结果
function parseQueryString(url) {
todo
if(url == undefined){
return {}
}else if(url.indexOf("?") == -1 || url.indexOf("?") == url.length -1){
return {}
}
else if('&' === url[url.length -1]){
let i = url.indexOf('?')
let arr = url.slice(i+1).split('&')
let arr1 = arr.pop()
let obj = arr.reduce(function (obj, current) {
let a= current.split('=');
obj[a[0]] = a[1];
return obj;
}, {});
return obj;
}
let i = url.indexOf('?')
let arr = url.slice(i+1).split('&')
let obj = arr.reduce(function (obj, current) {
let a = current.split('=');
if(a[1]==undefined){
a[1]=''
}
a[1] = decodeURIComponent(a[1])
obj[a[0]] = a[1];
return obj;
},{})
return obj;
}
//有点麻烦 不想改了 你们自行修改
第五题
将一个 JSON Object 转换成 query string
如:输入 { a:1, b:2 } 输出 a=1&b=2
注意:需要考虑 URL 转义的情况,如中文或特殊字符
function toQueryString(map) {
todo
if(map == undefined || Object.keys(map).length === 0){
return ''
}
let str = ''
for(let key in map){
if(map[key]===undefined || map[key]===null){
str += `${key}=&`;
}else {
map[key] = encodeURIComponent(map[key])
str += `${key}=${map[key]}&`;
}
}
return str.slice(0,-1)
}
第六题
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引,如果不存在,则返回-1
s = "leetcode" 返回 0
s = "loveleetcode" 返回 2
function firstcode(s){
for(let i=0;i<s.length;i++){
if(s.lastIndexOf(s[i])==s.indexOf(s[i])){
let a = s.indexOf(s[i])
return a;
}
}return -1;
};
第七题
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 n/2 的元素。
function mostNum(num) {
let count = 0;
let res = 0;
for (i = 0; i < num.length; i++) {
if (count == 0) {
res = num[i];
}
if (num[i] == res) {
count++;
} else {
count--;
}
}
console.log(res);
return res;
};
第八题
实现 strStr() 函数。给定两个字符串 haystack 和 needle,
请在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。
("hello", "ll"); 2
("aaaaa", "bba"); -1
("", "")); 0
function strStr(str,str1){
if(str === ''){
str1 = ''
}
let reg = new RegExp(`${str1}`,`g`)
return str.search(reg);
}
第九题
编写一个函数 传入一个整数 输出整数的格式化结果
例如: 输入 1234567 输出 1,234,567
输入 12345678 输出 12,345,678
function format(num){
if(typeof num !== "number"){
return '非数字'
}else{
let arr = String(num).split('').reverse();
for(i=arr.length-1;i>=0;i--){
if(i%3===0){
arr1 = arr.splice(i,0,',')
}
}
if(arr[0]===','){
arr2 = arr.slice(1)
}
return arr2.reverse().join('')
}
}
第十题
编写一个函数 传入一个整数作为参数 判断该参数是否为质数 返回一个布尔值作为结果
function isZs(num){
let arr = []
for(i=2;i<num;i++){
arr.push(i)
}
console.log(arr)
for(i=0;i<arr.length;i++){
if(num%arr[i]===0){
return false;
}else{
return true;
}
}
}
第十一题
有效的字母异位词
输入: s = "anagram", t = "nagaram"
输出: true
输入: s = "rat", t = "car"
输出: false
function abc(s,t){
let s1 = s.split('')
let t1 = t.split('')
function sort(a,b){
return a.charCodeAt() - b.charCodeAt()
}
s1.sort()
console.log(s1)
t1.sort()
console.log(t1)
return s1.sort().join('')===t1.sort().join('') ? true:false;
}
十二题
反转整数
234 => 432
-3456 => -6543
120 => 21
const rel = (x) => {
let num = 0 ;
let int = Math.abs(x);
while(int!==0){
num = (int%10) + (num*10);
int = Math.floor(int/10);
}
if(x>0){
return num;
}
return num*-1;
}
console.log(rel(-345))
function num(num){
if(typeof num !== 'number'){
return '非数字'
}else{
let num1 = num>0? String(num).split('').reverse().join(''):String(num).slice(1).split('').reverse().join('');
let num2 = num>0?parseInt(num1,10):0-parseInt(num1,10)
return num2
}
}
第十三题
1-10
1 2 3 4 5 6 7 8 9 10
1 3 5 7 9
1 5 9
1 9
问 1-100 循环删除偶数位 直到剩下2个数 除了1 另外一个是多少?
let arr = [];
for(i=1;i<=100;i++){
arr.push(i)
}
console.log(arr);
while(arr.length>2){
for(i=0;i<arr.length;i++){
if(i%2){
delete arr[i];
}
}
for(j=0;j<arr.length;j++){
if(arr[j]===undefined){
arr.splice(j,1)
}
}
}
第十四题
编写一个函数 unique 实现数组去重
function unique(arr){
let arr1 = [];
for(i=0;i<arr.length;i++){
if(!arr1.includes(arr[i]))
arr1.push(arr[i])
}
return arr1;
}
第十五题
编写一个函数sort 对数组进行排序 返回一个对象包含 排序后的数组 最小值 最大值
function sort(arr){
for(i=0;i<arr.length-1;i++){
for(j=0;j<arr.length-i-1;j++){
if(arr[j]>arr[j+1]){
arr[j]=arr[j]+arr[j+1];
arr[j+1]=arr[j]-arr[j+1];
arr[j]=arr[j]-arr[j+1]
}
}
}
return {1:arr,2:arr[0],3:arr[arr.length-1]}
}
第十六题
回文判断
编写一个函数 传入一个字符串判断传入的字符串是否是回文并返回一个布尔值
'abcba' true
'abccba' true
'12321' true
'abbcc' false
'1234554321' true
'1233321' true
function isback(str){
let arr = str.split('').reverse().join('')
if(arr === str){
return true
}else{
return false
}
}
第十七题
字符串统计
统计str中的 大写字母 小写字母 和 数字的数量
var str = 'gf45k76dEW6Q5lU7YT76Inkl';
function reduce(str){
let arr = str.split('');
arr1 = arr.reduce((obj,current)=>{
let code = current.charCodeAt(0);
if(code>48&&code<57){
obj.num++
}else if(code>65&&code<90){
obj.A++
}else if(code>97&&code<122){
obj.a++
}
return obj;
},{A:0,a:0,num:0})
return arr1
}
第十八题
将str1 处理成 'No Zuo No Die'
function tiem(str){
let arr = str.split(',');
arr1 = arr.map(el=>{
return el[0] = el[0].toUpperCase()+el.slice(1)
})
return arr1.join(',')
}
第十九题
字符串压缩
var str3 = 'aaabcccccddeeefggh'; 处理结果 -> '3a1b5c2d3e1f2g1h'
function compress(str){
let count=1;
let result = ''
for(let i = 0 ; i<str.length; i++){
if(str[i] == str[i+1]){
count++;
}else{
result += count+str[i];
count = 1;
}
}
第二十题
给定一个字符串,找到它的第一个不重复的字符,斌返回它的索引,如果不存在,则返回-1
s = "leetcode" 返回 0
s = "loveleetcode" 返回 2
function isStrErverse(str){
for(i=0;i<str.length;i++){
let arr = str.split('');
arr.splice(i,1);
let ind = arr.indexOf(str[i]);
if(ind === -1) return i;
}
return -1;
}