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. 从零开始构建一个的asp.net Core 项目(二)

    接着上一篇博客继续进行.上一篇博客只是显示了简单的MVC视图页,这篇博客接着进行,连接上数据库,进行简单的CRUD. 首先我在Controllers文件夹点击右键,添加->控制器 弹出的对话框中 ...

  2. vue视频学习笔记

    video 7 vue问题: 论坛 http://bbs.zhinengshe.com------------------------------------------------UI组件 别人提供 ...

  3. Maven学习-项目对象模型

    POM包含了四类描述和配置: 项目总体信息:它包含了一个项目的名称,项目的URL,发起组织,以及项目的开发者贡献者列表和许可证. 构建设置:在这一部分,我们自定义Maven构建的默认行为.我们可以更改 ...

  4. clojure 使用阿里云仓库

    clojure 使用阿里云仓库 学习一门语言,如果没有梯子真的是一件非常痛苦的事情,好在阿里巴巴为我们java程序员提供了maven镜像.近期学习clojure,为了找解决方案在stackoverfl ...

  5. dubbo+zookeeper+springmvc+mybatis+shiro+redis架构

    内容管理(CMS)系统,包括内容管理,栏目管理.站点管理.公共留言.文件管理.前端网站展示等功能: 在线办公(OA)系统,主要提供简单的流程实例. Jeesz提供了常用工具进行封装,包括日志工具.缓存 ...

  6. Day1-用户输入及字符串格式化输入

    1.用户输入--input和getpass函数 2.字符串的格式化 ############################################# 一.用户输入--input()函数 #! ...

  7. 《高性能javascript》 --- in case of odd number of items(奇怪的条目的数量)

    不知道是做着故意放的还是什么原因.总之运行后就会出现问题(奇怪的条目的数量) function merge(left, right){ var result = []; while (left.len ...

  8. 2017 UESTC Training for Graph Theory

    图论姿势太弱,这套题做了好久.. A:枚举最短那条边,然后最小生成树那种操作,1 和 n 联通就算答案 B:考虑到假如我们能凑出x的话,那很明显我们也能凑出任意数表示x + ai,考虑选取一个ai,然 ...

  9. 【Spark2.0源码学习】-6.Client启动

    Client作为Endpoint的具体实例,下面我们介绍一下Client启动以及OnStart指令后的额外工作 一.脚本概览      下面是一个举例: /opt/jdk1..0_79/bin/jav ...

  10. MySQL定时逻辑备份

    当项目数据量不大时,备份可以采用逻辑备份. 数据库可以搭建一主一从,从库每天凌晨三点全量逻辑备份. 然后同时记录二进制文件,用来进行基于时间点的数据恢复. 其他备份方案详见我的思维导图:MySQL备份 ...