JavaScript练习笔记整理·2 - 6.24

Codewars地址:https://www.codewars.com/

欢迎和大家一起来讨论~

基础练习(1):

我的解答为:

function isIsogram(str){
  if(str == "") return true;
  return str.toLowerCase().split("").sort().every(function(item,index,array) {
   return item != array[index+1];
  });;
}

较优解一:

function isIsogram(str){
  return !/(\w).*\1/i.test(str)
}

较优解二:

function isIsogram(str){
  var i, j;
  str = str.toLowerCase();
  for(i = 0; i < str.length; ++i)
    for(j = i + 1; j < str.length; ++j)
      if(str[i] === str[j])
        return false;
  return true;

分析:

第一位小伙伴是使用正则表达式来判断是否有重复的值,方法简单,而我一开始就没想到可以用这个方法,Hhhh。而第二位小伙伴则是先将转为小写,再用一个复合循环来比较每个字符串与自身以外的字符串是否相等,若相等则返回false。而我的思路与第二位相似,先将判断是否为空字符串,若为空则为true。接着再转为小写,使用空格分隔将字符串转为数组,进行排序后使用迭代方法,判断排序后的数组中是否存在相同的字符,若不存在的则返回true。

在刚开始使用迭代方法时,没有考虑到进行每一项与数组中每一项比较的时候,自身与自身比较会返回false,导致一直错误。后来查了资料才选择先排序再比较每一项与其后一项是否相等来判断是否有重复的值。相比之下,我想的是复杂了一些。

笔记:

正则表达式:通过RegExp类型支持正则表达式,创建正则表达式的语法为:var expression = /pattern/flags;

其中模式pattern是任何正则表达式。每个正则表达式都可带有一个或多个标记flags,用以标明正则表达式的行为。正则表达式的匹配模式支持三个标志:g(全局)、i(不区分大消息)、m(多行模式)。因正则表达式比较复杂,具体的模式在此不再叙述了。

看较优解一的正则表达式/(\w).*\1/i ,解释如下:

圆括号()表示提取匹配的字符串,对字符进行分组。

括号中的\w表示匹配包括下划线在内的任何单词字符。

点.表示匹配换行符以外的任何字符。星号*表示匹配零次或多次。

\1表示与第一个小括号中要匹配的内容相同。注意\1必须配合小括号使用。

正则表达式后的test()方法可以知道目标字符串与某个模式是否匹配,接收一个字符串参数。在模式与该参数匹配的情况下返回true。否则,返回false。


基础练习(2):

我的解答:

function digitize(n) {
  return n.toString().split("").reverse();
}

一开始看到题目的时候信心满满,哇,这很简单呐,先是将数值型数据转为字符型,再使用split()方法转为数组,最后使用reverse()方法翻转数组就好了。结果…出现了…这样的结果……

百思不得其解,怀疑是不是题目的测试有什么问题,最后跑去看了答案,才知道需要在转为数组后再将字符改为数值型,才能避免上述的错误。

function digitize(n) {
  return n.toString().split("").map(Number).reverse();
}


基础练习(3):

我的解答为:

var isSquare = function(n){
  if(n<0) return false;
  if(Math.sqrt(n) % 1 == 0) {return true}
  else {return false};
}

较优解为:

function isSquare(n) {
  return Math.sqrt(n) % 1 === 0;
}

分析:

相比之下,思路是一样的,而我的解答则多写了一些语句,不够简洁,这道题目也是很简单的了,所有没有笔记,Hhhh。



基础练习(4):

我的解答为:

function GetSum( a,b ) {
  if(a == b) return a;
  var i = a>b?b:a;
  var length = (a>b?a:b)+1;
  var sum = 0;
  for(var i;i<length;i++) {
    var sum = sum + i ;
  }
  return sum;
}

较优解为:

const GetSum = (a, b) => {
  let min = Math.min(a, b),
      max = Math.max(a, b);
  return (max - min + 1) * (min + max) / 2;
}

分析:

我的思路主要是求出a、b中的最大值和最小值后用for循环求出它们之间的数的和,想法也是挺奇葩的,Hhhh。而较优解的这位小伙伴求出最值以后,用了等差数列的求和公式,真是机智的做法!!!果然想学好编程还要能运用好数学知识呢,学到了,Hhhh。


总结:

今天做的题目所需要的知识基本和昨天是一样的,运用方法上越来越熟练了。但是做题目的时候,经常会遇到一些自己认为理所当然是这样做的解法,结果一测试就会发现有错误,感觉莫名其妙找不到错误的时候,经常就炸毛了。今天一次是第二个练习的错误,以往都是对的情况下,这次挖了坑,也知道了以后遇到问题的时候就要转变思路,去解决问题,而不是在怀疑人生。第二次是没有好好理解题目,以为很简单,结果是自己理解错误了,这大概也是要好好理解用户需求的意思吧,Hhhh。

偶然间做到了一道升级的题目,顺利升级,看到Codewars的提示也是满满的鼓励,真是路漫漫之远兮,吾将上下而求索呀,明天继续加油吧!

 

时间: 2024-10-09 01:25:57

JavaScript练习笔记整理·2 - 6.24的相关文章

JavaScript练习笔记整理&#183;1 - 6.23

练习平台Codewars地址:https://www.codewars.com/ 欢迎和大家一起来讨论~╭( ???)? ?? 基础练习(1): 我的解答为: class SmallestIntegerFinder { findSmallestInt(args) { var a = args[0]; for(var i=0; i<args.length; i++){ if(args[i] <= a){ a = args[i]; } } return a; } } 较优解答为: class Sm

javascript学习笔记整理(数组)

数组是一个可以存储一组或是一系列相关数据的容器. 一.为什么要使用数组. a.为了解决大量相关数据的存储和使用的问题. b.模拟真是的世界. 二.如何创建数组 A.通过对象的方式来创建——var a=new Array(); 赋值方式: 1.直接赋值——var a=new Array(元素1,元素2,元素3,元素4,........) var a=new Array(数值)如果只有一个元素,并且这个元素是数值类型的,那么他就是指定数组的长度并且他的值都是undefined var a=new A

JavaScript学习笔记整理Day15

BOM浏览器对象模型 1.window 2.Location 3.History 4.Screen 5.Navigator 一.window window概述: 1.window是客户端JavaScript的全局对象 2.它表示web浏览器的一个窗口或窗体,并且用标识符window来引用 1.innerHeight 返回窗口的文档显示区高度 IE9以下不兼容 2.innerWidth 返回窗口的文档显示区宽度 IE9以下不兼容 解决方法: //获取窗口的宽高 var width = window

javascript学习笔记整理(事件)

一.事件驱动 1.事件javascript侦测到的用户的操作或是页面的一些行为(怎么发生的) 2.事件源引发事件的元素(发生在谁的身上) 3.事件处理程序对事件处理的程序或是函数 (发生了什么事) 二.事件的分类 1.鼠标事件 onclick 鼠标点击事件 ondblclick     鼠标双击事件 onmousedown     鼠标按下 onmouseup      鼠标松开 onmousemove       鼠标移动 onmouseover         鼠标移入 onmouseout

JavaScript学习笔记整理Day9

一.JavaScript定时器: 1.单次定时:setTimeout(fn,time); 2.多次定时:setInterval(timer); 3.停止单次定时:clearTimeout(timer); 4.停止多次定时:clearInterval(timer); 实例1:使用单次和多次定时写倒计时 <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"&g

javascript学习笔记整理(函数)

javascript函数的声明和调用将完成某一特定功能的代码集合起来,可以重复使用的代码块. 一.函数的声明方式(创建) A.基本语法(function  关键字)function 函数名([参数1],[参数2]....){    函数体    [retrun]  //返回值} function a(){ alert(1) }; B.字面量定义的形式(匿名函数)var 变量=function ([参数1],[参数2]....){    函数体    [retrun]  //返回值} var a=

JavaScript练习笔记整理&#183;4 - 6.26

基础练习(1): 我的解答为: function getMiddle(s) { if(s.length%2 == 0) { return s.charAt(s.length/2-1)+s.charAt(s.length/2); } else { return s.charAt(s.length/2); } } 较优解答为: function getMiddle(s) { return s.substr(Math.ceil(s.length / 2 - 1), s.length % 2 === 0

JavaScript练习笔记整理&#183;3 - 6.25

欢迎和大家一起来讨论~ 基础练习(1): 我的解答为: function array_diff(a, b) { if (b == "") return a; return a.filter(function(item,index,array) { var flag = false; for(var i=0;i<b.length;i++) { if(item !== b[i]) flag = true; } return flag; }); } 较优解答为: function ar

JavaScript学习笔记整理Day4

##函数 ####函数是一段在一起,可以做某件事的程序. ###优点:控制程序设计的复杂性 1. 提高软件的开发可靠性 2. 提高软件的开发效率 3. 提高软件的可维护性 4. 提高程序的重用性 ###JavaScript定义函数的方式 1. function 关键字  function demo(){ code..} 2. 匿名函数  var demo = function(){} 3. Function 构造函数   (不推荐使用) var demo = new Function('a','