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的提示也是满满的鼓励,真是路漫漫之远兮,吾将上下而求索呀,明天继续加油吧!

 

 

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

  1. JavaScript练习笔记整理·1 - 6.23

    练习平台Codewars地址:https://www.codewars.com/ 欢迎和大家一起来讨论~╭( ・ㅂ・)و ̑̑   基础练习(1):   我的解答为: class SmallestIn ...

  2. JavaScript练习笔记整理·3 - 6.25

    欢迎和大家一起来讨论~   基础练习(1):   我的解答为: function array_diff(a, b) { if (b == "") return a; return ...

  3. JavaScript练习笔记整理·4 - 6.26

    基础练习(1): 我的解答为: function getMiddle(s) { if(s.length%2 == 0) { return s.charAt(s.length/2-1)+s.charAt ...

  4. JavaScript学习笔记整理

    <script></script>写在<head></head>或者<body></body>中效果一样.一般写在head中或者 ...

  5. JavaScript笔记整理

    整理一篇工作中的JavaScript脚本笔记,不定时更新,笔记来自网上资料或者自己经验归纳. (1) 获取Url绝对路径 function getUrlRelativePath() { var url ...

  6. java笔记整理

    Java 笔记整理 包含内容     Unix Java 基础, 数据库(Oracle jdbc Hibernate pl/sql), web, JSP, Struts, Ajax Spring, E ...

  7. 布客&#183;ApacheCN 翻译/校对/笔记整理活动进度公告 2020.1

    注意 请贡献者查看参与方式,然后直接在 ISSUE 中认领. 翻译/校对三个文档就可以申请当负责人,我们会把你拉进合伙人群.翻译/校对五个文档的贡献者,可以申请实习证明. 请私聊片刻(52981514 ...

  8. 学习ReactNative笔记整理一___JavaScript基础

    学习ReactNative笔记整理一___JavaScript基础 ★★★笔记时间- 2017-1-9 ★★★ 前言: 现在跨平台是一个趋势,这样可以减少开发和维护的成本.第一次看是看的ReactNa ...

  9. javascript - 工作笔记 (事件四)

    在javascript - 工作笔记 (事件绑定二)篇中,我将事件的方法做了简单的包装,  JavaScript Code  12345   yx.bind(item, "click&quo ...

随机推荐

  1. String,StringBuilder,StringBuffer的对比测试

    public class TestString { private static final int COUNT = 10000000; public static void main(String ...

  2. 利用Python进行简单的图像识别(验证码)

    这是一个最简单的图像识别,将图片加载后直接利用Python的一个识别引擎进行识别 将图片中的数字通过 pytesseract.image_to_string(image)识别后将结果存入到本地的txt ...

  3. 像写C#一样编写java代码

    JDK8提供了非常多的便捷用法和语法糖,其编码效率几乎接近于C#开发,maven则是java目前为止最赞的jar包管理和build工具,这两部分内容都不算多,就合并到一起了. 愿编写java代码的过程 ...

  4. [原创]普通的MySQL多表连接查询

  5. UI基础控件—UIView

    1. 什么是UIView?     UIView :代表屏幕上的一个矩形区域,管理界面上的内容; 2. 创建UIview a.开辟空间并初始化视图(初始化时,给出视图位置和大小) b.对视图做一些设置 ...

  6. 文件查找---find

    文件查找(find) 1 find 简单的说,就是实时查找指定的内容或条件.特点:最新.最快.最准确. 用法:find [查找路径] [查找条件] [找到后进行的动作]     eg. find /e ...

  7. vue-router2.x

    组件中的路由 <router-link to=""></router-link> 无参数 <router-link to="/ar/1&qu ...

  8. 一个简单易用的容器管理平台-Humpback

    什么是Humpback? 在回答这个问题前,我们得先了解下什么的 Docker(哦,现在叫 Moby,文中还是继续称 Docker). 在 Docker-百度百科 中,对 Docker 已经解释得很清 ...

  9. C/s从文件(TXT)中读取数据插入数据库

    流程: 1.当按钮单击时,弹出OpenFileDialog 2.判断后缀名是否合法 3.导入数据库 按钮事件中的代码: 1.判断用户是否选中文件. 2.判断用户选择的文件是否为txt //第一步,当按 ...

  10. python基础:各种类型的转换

    1.str转dict #借助eval,dict str="{"data":"123","result":"ok" ...