练习平台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 SmallestIntegerFinder {
findSmallestInt(args) {
return Math.min.apply(null, args);
}
}

分析:

可以看出我所想到使用的方法仍处于比较初级的阶段,没有想到用Math对象的方法实现。使用方法可以减少代码量,更简洁。也说明了对于常用方法这部分的内容还不熟练。

笔记:

Math.min()方法和Math.max()方法的作用是用于确定一组数值中的最小值和最大值。可以接收任意多个数值参数。
 
apply()方法的作用是在特定的作用域中调用函数,相当于设置函数体内thisUI想的值。apply()方法接收两个参数:一个是在其中运行函数的作用域,另一个是参数数组。
相似的另一个方法call()方法,与apply()方法有同样的作用,区别在于接收参数的方式不同。call()方法接收的第一个参数也为this值,其余参数都直接传递给函数,传递给函数的参数必须逐个列举出来。
apply()方法和call()方法能够扩充函数运行的作用域,并且对象不需要与方法有任何耦合关系。
 
高程中两个方法结合使用得出最值的例子:
var values = [1,2,3,4,5,6,7,8];
var max = Math.max.apply(Math,values);
 
Math.min(...args)
JavaScript中的新特性,扩展语法( spread syntax),在对象前加上...的前缀,即可遍历对象。
 

基础练习(2)

我的解答为:

function removeSmallest(numbers) {
var lowest = Math.min.apply(Math,numbers);
var index = numbers.indexOf(lowest);
numbers.splice(index,1);
return numbers;
}

较优解答为:

function removeSmallest(numbers) {
if(!numbers)return [];
var min=Math.min.apply(null,numbers);
numbers.splice(numbers.indexOf(min),1);
return numbers;
}

分析:

思路都是使用Math.min.apply()方法求出最小值,再使用indexOf()方法求出该最小值在数组中的索引值,最后通过splice()方法,通过设置索引值和删除的项数来删除该最小值。不同的一点是,在执行这一些列的操作前,先判断数组是否为空,若为空则直接返回一个空数组。

笔记:

indexOf()方法返回要查找的项在数组中的位置,或者在没有找到的情况下返回-1,接收两个参数:要查找的项和表示查找起点位置的索引(可选)。indexOf()方法表示从数组开头开始向后查找,而lastindexOf()方法则从数组的末尾开始向前查找。
 
splice()方法的主要用途是想数组的中部插入项,但使用该方法的方式有三种,分别为删除、插入和替换。splice()方法始终返回一个数组,该数组中包含从原始数组中删除的项,若没有删除项则返回一个空数组。该方法会改变原数组。三个使用方式的介绍如下:
删除:可以删除任意数量的值,指定两个参数:要删除的第一项的位置和要删除的项数。
插入:可以向指定位置插入任意数量的项,需要提供三个参数:起始位置、要删除的项数(一般为0)和要插入的项。
替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,需指定三个参数:起始位置、要删除的项数和要插入的任意数量的项。
 

 基础练习(3)

我的解答为:

function squareDigits(num) {
var arr = num.toString().split("");
var newarr = arr.map(function(item,index,array) {
return Math.pow(item,2);
});
var newnum = Number(newarr.join(""));
return newnum;
}

较优解答为:

function squareDigits(num){
return Number((' ' + num).split('').map(function (val) { return val * val;}).join(' '));
}

分析:

相比之下,较优解一般喜欢使用一条语句得出答案,此外使用的方法都是相类似的。其中将数值型数据转为字符型数据时,他使用的是弱类型转换。而后在计算平方时,使用的方法是直接相乘,我觉得不利于日后的代码修改的,比如说改为任意次方?,所以我觉得使用Math.pow()方法会比较好一些。

笔记:

split()方法可以基于指定的分隔符将一个字符串分割成多个子字符串,并将结果放在一个数组中。分隔符可以是字符串也可是一个RegExp对象。可接收可选的第二个参数,用于指定数组的大小,以便确保返回的数组不会超过既定大小。
 
map()方法是对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组,该数组的每一项都是在原始数组中的对应项上运行传入函数的结果。相似的迭代方法还有every()、filter()、forEach()和some()。
 
Math.pow()方法,接收两个参数:num和power,返回num的power次幂。
 
join()方法可以使用不同的分隔符来构建字符串,只接收一个参数,用作分隔符的字符串,后返回包含所有数组向的字符串。若不给join()方法传入任何值,或传入undefined,则使用逗号作为分隔符。
 

今日总结:
之前也有在FreeCodeCamp里练习,与Codewars不同的是FreeCodeCamp比较基础,做练习的时候有相应的方法提示,不需要思考就可以根据所给的方法进行测试,所以仅仅知道这些方法的存在而在用的时候很难想起来噢原来可以这样用或者是这个方法具体是怎么用。而在Codewars完全是只有题目,靠自己的思考解答,而且解答以后可以看到其他人的比较好的答案。为了解答题目的过程,翻书网上找资料,最后一点一点从错误到正确,还是蛮有成就感的。通过比较自己和被人的答案也可以知道怎么解答会更好一些。最后再把方法总结一遍,也就能记住了。
 
 

Codewars练习笔记·1 - 6.23的更多相关文章

  1. 《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(5.23)-- Format NVM command

    5.23 Format NVM command - NVM Command Set Specific Format NVM命令用于低级格式化NVM媒介.这个命令被host主机使用,来变更LBA数据大小 ...

  2. 安卓权威编程指南-笔记(第23章 HTTP与后台任务)

    1. 网络连接基本 //通过指定URL获取原始数据,并返回一个字节流数组. public byte[] getUrlBytes(String urlSpec)throws IOException{ / ...

  3. codewars 题目笔记

    原题: Description: Bob is preparing to pass IQ test. The most frequent task in this test is to find ou ...

  4. 《从零开始学Swift》学习笔记(Day 23)——尾随闭包

    原创文章,欢迎转载.转载请注明:关东升的博客 闭包表达式可以作为函数的参数传递,如果闭包表达式很长,就会影响程序的可读性.尾随闭包是一个书写在函数括号之后的闭包表达式,函数支持将其作为最后一个参数调用 ...

  5. Index of my articles

    65:一个表格说明RelativeLayout中的几个重要属性[Written By KillerLegend] (2013-10-16 21:59) 64:win7修改软件[授权给…]后面的名称 ( ...

  6. Opencv 学习资料集合(更新中。。。)

    基础学习笔记之opencv(24):imwrite函数的使用 tornadomeet 2012-12-26 16:36 阅读:13258 评论:9 基础学习笔记之opencv(23):OpenCV坐标 ...

  7. .vimrc快捷键设置

    $ cat ~/.vimrc,centos7是在/etc/vimrc文件中配置. nmap <C-_>s :cs find s <C-R>=expand("<c ...

  8. [No0000199]设计模式总结

    设计模式之间的关系: 设计模式总概况: 一.设计原则 .单一职责原则 一个类,只有一个引起它变化的原因.应该只有一个职责.每一个职责都是变化的一个轴线,如果一个类有一个以上的职责,这些职责就耦合在了一 ...

  9. Drupal 7.23版本升级笔记

    转载请注明出处:http://blog.csdn.net/panjunbiao/article/details/9860849 今天将尝试将Drupal网站从7.22升级到7.23,下面是升级笔记. ...

随机推荐

  1. 跨域问题解决方案(HttpClient安全跨域 & jsonp跨域)

    1 错误场景 今天要把项目部署到外网的时候,出现了这样的问题, 我把两个项目放到自己本机的tomcat下, 进行代码调试, 运行 都没有问题的, 一旦把我需要调用接口的项目B放到其他的服务器上, 就会 ...

  2. ST-2

    1.第一个程序没有覆盖到下表为0的数.第二个程序找到的是x中第一个等于0的数的下标. 2.对于第一个程序:x = [2,3,5], y = 3 对于第二个程序:X = [2,0,6] 3.对于两个程序 ...

  3. poj1743 Musical Theme 后缀数组的应用(求最长不重叠重复子串)

    题目链接:http://poj.org/problem?id=1743 题目理解起来比较有困难,其实就是求最长有N(1 <= N <=20000)个音符的序列来表示一首乐曲,每个音符都是1 ...

  4. 【Python灰帽子--黑客与逆向工程师的Python编程之道】我的学习笔记,过程.(持续更新HOT)

    我的学习笔记---python灰帽子 世界让我遍体鳞伤,但伤口长出的却是翅膀. -------------------------------------------- 前言 本书是由知名安全机构Im ...

  5. 写给Android App开发人员看的Android底层知识(3)

    (七)App启动流程第2篇 书接上文,App启动一共有七个阶段,上篇文章篇幅所限,我们只看了第一阶段,接下来讲剩余的六个阶段,仍然是拿斗鱼App举例子. 简单回顾一下第一阶段的流程,就是Launche ...

  6. Norm 数据库操作竟然可以如此简单

    github地址,https://github.com/xcr1234/norm/欢迎各位大神fork&交流! Norm Norm是一套微型的JAVA数据库ORM库,提供了简单高效的 API, ...

  7. STM32串口控制步进电机(原创)

    用的42步进电机: 厂家可能不一样,两项四线步进电机,里面有两个线圈.在电机什么电都没有接的情况下,用万用表测量四个管脚:两两短接(或者阻值很小)的为一组,可以分别接A+,a-剩余接B+,B-;顺序可 ...

  8. java 操作 redis

    1.Java 使用 Redis 只需要下载一个jar包即可 地址:http://maven.outofmemory.cn/redis.clients/jedis/2.5.2/ 工程

  9. java zip4j 内存文件和磁盘文件 压缩和加密

    经常服务器需要对文件进行压缩,网络上流传较多的是从磁盘文件中来压缩成zip文件.但是常常服务器的文件存放在内存中,以byte[]形式存储在内存中.这个时候就不能使用网络上流传的常用方法了,这里就需要对 ...

  10. vue-动手做个选择城市

    查看完整的代码请到   我的github地址  https://github.com/qianyinghuanmie/vue2.0-demos 一.结果展示 二.前期准备: 1.引入汉字转拼音的插件, ...