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. 做自己的PHP语法解释器

    PHP关键字异构化实验 PHP词法分析和语法分析 简单理解PHP代码执行过程:http://blog.csdn.net/risingsun001/article/details/22888861 PH ...

  2. 记录JavaFx中非常重要的细节,入门了也未必知道

    title: 记录JavaFx中非常重要的细节 JavaFx中有一些疑难杂症,或许你以为你掌握了JavaFx,但是也未必知道我所说的这些问题和解决方案,如果有帮助到你的,可以加群最大最活跃的JavaF ...

  3. 关于java和c++中的i++

    看到一个题目,大概是i=i++之类. 乍一看很简单,都知道i++的先参与计算再自增, 所以i不变. 但是仔细一想, 如果i不变, 那么在赋值之后, 自增的i, 增加的是谁呢? 逻辑顺序是怎样的呢? / ...

  4. Alamofire源码解读系列(十二)之请求(Request)

    本篇是Alamofire中的请求抽象层的讲解 前言 在Alamofire中,围绕着Request,设计了很多额外的特性,这也恰恰表明,Request是所有请求的基础部分和发起点.这无疑给我们一个Req ...

  5. 初识数据库连接池开源框架Druid

    Druid是阿里巴巴的一个数据库连接池开源框架,准确来说它不仅仅包括数据库连接池这么简单,它还提供强大的监控和扩展功能.本文仅仅是在不采用Spring框架对Druid的窥探,采用目前最新版本druid ...

  6. 《安卓网络编程》之第八篇 安卓与服务器之间通讯JSON

    JSON是什么? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition ...

  7. 字符串时间和NSDate相互转换的坑

    项目中服务器传回来的时间是这种格式的 Sep 5, 2016 6:59:05 PM 现在要将这段字符串转换成 2016-09-05 06:59 被坑的地方有2个点 服务器传回来的英文的Sep,调试的时 ...

  8. Pandas日期数据处理:如何按日期筛选、显示及统计数据

    前言 pandas有着强大的日期数据处理功能,本期我们来了解下pandas处理日期数据的一些基本功能,主要包括以下三个方面: 按日期筛选数据 按日期显示数据 按日期统计数据 运行环境为 windows ...

  9. 一个IT人员实用的工具:Tmux

    1.Tmux安装 tmux下载地址: http://sourceforge.net/projects/tmux/files/tmux/tmux-1.6/tmux-1.6.tar.gz/download ...

  10. Targeted Learning R Packages for Causal Inference and Machine Learning(转)

    Targeted learning methods build machine-learning-based estimators of parameters defined as features ...