JavaScript的一些编程题分享

将字符串abc-def-ghi转换为驼峰格式

这里我们的思路是利用字符串方法和正则表达式

const str = 'abc-def-ghi';
   const camelCaseStr = str.replace(/[-_][^-_]/g, match => match.charAt(1).toUpperCase());
   console.log(camelCaseStr); // 'abcDefGhi'

这里使用了 replace 方法,它接受两个参数:第一个参数是要匹配的正则表达式,第二个参数是替换成什么。具体来说,正则表达式 /[-_][^-_]/g 匹配所有连字符或下划线后面紧跟着一个非连字符或下划线的位置。然后,回调函数的作用是将匹配到的字符中第二个字符转化为大写字母,并返回这个新字符串来替换原来的匹配。最终结果为 'abcDefGhi',即驼峰格式的字符串。

找出数组 arr [1, 2, 4, 4, 3, 3, 1, 5, 3]中重复出现过的元素(不用考虑返回顺序)

const arr = [1, 2, 4, 4, 3, 3, 1, 5, 3];  
	const result =new Set(arr.filter((item, index) => {  
	  return arr.indexOf(item) !== index;  
	})) 

这里我们使用过滤器的方法,它需要传入俩个值,其中,第一个参数 item 表示当前正在遍历的元素,第二个参数 index 表示当前元素在数组中的索引位置。这个回调函数的作用是判断当前元素是否在数组中重复出现,如果是则返回 true,否则返回 false。这样就能找到重复的元素。

但是这样我们找到的新的数组中有新的重复,我们在使用Set去掉重复即可。

数组去重,去掉arr = [1,1,8,8,12,12,15,15,16,16];数组中重复的元素 

var arr = [1,1,8,8,12,12,15,15,16,16];
      function arr1(arr){
        return Array.from(new Set(arr))
      }
      console.log(arr1(arr));

函数 arr1 中首先使用 JavaScript 中的 Set 对象对输入数组进行去重操作。Set 对象是一组不重复的值的集合,它可以用来快速地从一个数组中筛选出不重复的元素。这里使用 new Set(arr) 创建了一个 Set 对象,将输入数组 arr 作为参数传入。

然后使用 Array.from() 方法将 Set 对象转化为一个新的数组,并将其作为函数的返回值。Array.from() 方法可以将一个类似数组或可迭代对象转换为一个新的真正的数组实例。

写一个方法,清除字符串中所有的空格。例如:’  a  bc  ’,需要输出:’abc’。

var str='  a  bc  '
     function space(str){
       return str.replace(/\s/g,'')
     }
     console.log(space(str));

 正则表达式全局匹配将空格替换成空字符串

从字符串中移除HTML标签

function html_tags(str){
       return str.replace(/<\/?[^>]+(>|$)/g,'')
     }
     console.log(html_tags('<p><span>JAVASCRIPT</span></p>'));

这道题考的就是对正则表达式的理解

< 和 > 分别匹配开头和结尾尖括号。

\/? 匹配一个可选的斜杠,用于处理开始标签和结束标签之间的差异。

[^>]+ 匹配一个或多个非尖括号的字符,即标签名称和属性。

(>|$) 匹配一个尖括号和一个可选的大括号,用于处理嵌套标签的情况。

g 表示全局匹配模式,即在整个字符串中查找所有匹配项,而不是只查找第一个匹配项。

请编写代码,计算时间戳 1630257661126 与 1638257589478 中间间隔了多少天?

const timestamp1 = 1630257661126;
const timestamp2 = 1638257589478;

const dayInMillis = 24 * 60 * 60 * 1000; // 一天的毫秒数
const daysDiff = Math.abs(Math.floor((timestamp2 - timestamp1) / dayInMillis)); // 计算两个时间戳之间相差的天数

console.log(daysDiff);

 具体做法是,首先定义一个常量 dayInMillis 表示一天的毫秒数。然后通过减法运算得到两个时间戳之间的毫秒数差值,并使用 Math.floor() 方法向下取整得到相差的天数,最终使用 Math.abs() 方法取绝对值保证结果为正数。

注意,这里使用了 Math.floor() 方法是因为我们只需要考虑两个时间戳之间的完整天数,而不需要考虑小时、分钟等精确到秒以下的时间差。如果需要更加精确地计算日期差值,可以使用第三方库 moment.js 或者 day.js。

把下列JSON显示到页面上:

let obj= {
      "key" : "我爱你",
      "key1" : "一生一世"
  }
显示效果:
  <div>
    <div>我说:我爱你</div>
    <div>你说:一生一世一</div>
   </div> 

let obj= {
      "key" : "我爱你",
      "key1" : "一生一世"
  }
  let html=`<div>
<div>我说:${obj.key}</div>
<div>你说:${obj.key1}</div>
</div> `
document.write(html)

 ES6 模板字符串语法定义了一个名为 html 的字符串模板

最后,使用 document.write() 方法将模板字符串 html 输出到文档中

使用JavaScript实现斐波那契序列。斐波那契序列:0、1、1、2、3、5、8、13,这个数列的特点是从第3项开始,每一项都等于前两项之和。

使用递归方式实现斐波那契数列:

function fibonacci(n) {
  if (n <= 1) {
    return n;
  }
  return fibonacci(n - 1) + fibonacci(n - 2);
}

这里定义了一个名为 fibonacci 的函数,接受一个整数参数 n,表示要计算斐波那契数列的第 n 项。如果 n<=1,则直接返回 n;否则,通过递归调用自身来计算前两项之和,并返回结果。

使用循环方式实现斐波那契数列:

function fibonacci(n) {
  let prev = 0;
  let curr = 1;
  for (let i = 2; i <= n; i++) {
    const next = prev + curr;
    prev = curr;
    curr = next;
  }
  return curr;
}

在这个实现中,我们使用两个变量 prevcurr 来分别保存斐波那契数列的前两项。然后使用一个循环,从第三项开始一直计算到第 n 项,并依次更新 prevcurr 的值。最后返回当前项的值即可。

猜你喜欢

转载自blog.csdn.net/weixin_64612659/article/details/131263304