js作业

问题1:生成16进制随机颜色

//思路:
// 固定字符#,直接固定拼接上去
// 控制输出未6位数,其中数字在0-f
let str = "#";
//循环的规则数据
const arr = ["0", "1","2","3","4","5","6","7","8", "9", "a","b", "c","d","e","f","A","B","C","D","E","F",]; 
//控制需要几位数
for (i = 0; i < 6; i++) {
  str += arr[Math.floor(Math.random() * arr.length)];
}
console.log(str)

问题2:找出以下字符串中出现次数最多的字符和出现的次数 字符串:"abaasdffggghhjjkkgfddsssss3444343"

//要求
1、字符用的长度:
2、取出指定位置的字符,如:0,3,5,93、查找指定字符是否在以上字符串中存在,如:i,c,b等
4、替换指定的字符,如:g替换为22,ss替换为b等操作方法
5、截取指定开始位置到结束位置的字符串,如:取得1-5的字符串
6、找出以上字符串中出现次数最多的字符和出现的次数
7、遍历字符串,并将遍历出的字符两头添加符号"@”

const str="abaasdffggghhjjkkgfddsssss3444343“

//1、获取字符用的长度:
const length=str.length

//2、取出指定位置的字符,如:0,3,5,9等
function findStr(str, ...args) {
  if(args.length===0) throw new Error("请输入要查找的索引值")
  if(str.length===1)return str[0]
  let chars=[]
  args.map((i)=>{
      chars.push(str[i])
  })
  return chars
}
console.log(findStr(str));

//3、查找指定字符是否在以上字符串中存在,如:i,c,b等
function findExist(str, ...args) {
 if(args.length===0) throw new Error("请输入要查找的字符是否存在")
  if (args.length == 1) return str.includes(...args);
  let res = [];
  args.map((item) => {
    res.push(str.includes(item));
  });
   return res;
}
console.log(findExist(str, "i"));

//4、替换指定的字符,如:g替换为22,ss替换为b等操作方法
function replaceStr(str,replaceItem,toRep){
    //找到要被替换的值的下标
   return str.replaceAll(replaceItem,toRep)
}
console.log(replaceStr(str,"sssss","g"))
console.log(replaceStr(str,"ss","22"))

//5、截取指定开始位置到结束位置的字符串,如:取得1-5的字符串
function subStr(str, start, end) {
  //可扩展它不存在的时候
  if (start && typeof start !== "string") start = +start;
  if (end && typeof start !== "string") end =+end;
  if (!(start+"")) return;
  if (!end) return str.slice(start);
  return str.slice(start, end);
}

//找出以上字符串中出现次数最多的字符和出现的次数
function findMaxChar(str){
  const sum=[...str].reduce((pre, cur) => {
  //获取所有对象与值
  if (pre[cur]) {
    pre[cur]++;
  } else {
    pre[cur] = 1;
  }
  return pre;
}, {});
//只需要对比其中的某个数值排序获得其第一位
 const res= Object.entries(sum).sort ((x,y)=>y[1]-x[1])
 //解构出来
 const [[char,num]]=res
 //设置其返回值
  return {
      char,
      num
  }
}

console.log(findMaxChar(str))

//6、遍历字符串,并将遍历出的字符两头添加符号"@”
let result1 = "";
for (let char of str) {
   result1+="@"+char+"@"
}
console.log(result1)




问题3:把下面数组的首尾两个元素互换

思路:解构出来再交换

var arr = ["鹿晗", "王俊凯", "蔡徐坤", "彭于晏", "周杰伦", "刘德华", "赵本山"];
if(arr.length){
  [arr[0],arr[arr.length-1]]=[arr[arr.length-1],arr[0]]
}

问题4:计算指定日期是今年的第几天

题目描述:制作一个函数,getDayNum(年月日日期),可以返回指定日期是当前年的第几天
getDayNum( "2019-1-2")返回值为:2

function getDayNum(time) {
  let date = new Date(time);
  let year = date.getFullYear();
  // 利用 Date.UTC 计算该日期与年初的天数差
  let startOfYear = Date.UTC(year, 0, 1);//过年第一天
  let currentDate = Date.UTC(year, date.getMonth(), date.getDate());//当前年数/月数/日期

  return Math.floor((currentDate - startOfYear) / (1000 * 60 * 60 * 24)) + 1;
}

console.log(getDayNum("2022-7-23")); // 输出:204