练习平台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完全是只有题目,靠自己的思考解答,而且解答以后可以看到其他人的比较好的答案。为了解答题目的过程,翻书网上找资料,最后一点一点从错误到正确,还是蛮有成就感的。通过比较自己和被人的答案也可以知道怎么解答会更好一些。最后再把方法总结一遍,也就能记住了。
 
 

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

  1. JavaScript练习笔记整理·2 - 6.24

      Codewars地址:https://www.codewars.com/ 欢迎和大家一起来讨论~   基础练习(1):   我的解答为: function isIsogram(str){ if(s ...

  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. JAVA数据结构--哈希表的实现(分离链接法)

    哈希表(散列)的定义 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度 ...

  2. 6. Javscript学习笔记——BOM

    6. BOM 6.1 widow对象 全局作用域: window是浏览器的一个实例 window对象同时扮演着ECMAScript中的Global对象的角色,因此所有在全局作用域中声明的变量.函数都会 ...

  3. 第七次 Scrum Meeting

    第七次 Scrum Meeting 写在前面 会议时间 会议时长 会议地点 2019/4/11 22:00 10min 大运村1号楼6F 附Github仓库:WEDO 例会照片 工作情况总结(4.11 ...

  4. element-ui多层嵌套表格数据删除

    很多表格都要一个移除的功能,所谓移除,就是前端把表格的数据删除,普通的表格删除很简单,调用数据的删除方法就行.但是当表格是多层的嵌套类型时,就不能再使用普通的删除方法了.下面介绍一种自己在项目中用的方 ...

  5. 利用JS获取本地时间和服务器时间

    <p id="labTime"> <script type="text/javascript"> //取客户端时间 setInterva ...

  6. Java - 二分法查找(尚学堂第七章数组)

    import java.util.Arrays; public class TestBinarySearch { public static void main(String[] args) { in ...

  7. easyUI----纵向合并单元格

    使用Easyui-DataGrid过程用.做统计/报表等时经常会使用到合并单元格,原生态Easyui-DataGrid没有合并单元格的属性或方法. 解决方案: 代码一 onLoadSuccess: f ...

  8. HTTP 状态代码之汇总+理解

    这里有百度百科的介绍,还挺全的. 下面是在开发过程中遇到过的各种码,自己的问题自己的原因,同码不同错,贱笑贱笑. HTTP 406 Not Acceptable 这个错误的原因,是由于框架使用了`Sp ...

  9. unity 工具开发基础

    using System.Collections; using System.Collections.Generic; using System.IO; using System.Text; usin ...

  10. spring的基本用法

    1,关于spring容器: spring容器是Spring的核心,该 容器负责管理spring中的java组件, ApplicationContext ctx = new ClassPathXmlAp ...