欢迎和大家一起来讨论~
 
基础练习(1):
 

我的解答为:
function array_diff(a, b) {
if (b == "") return a;
return a.filter(function(item,index,array) {
var flag = false;
for(var i=0;i<b.length;i++) {
if(item !== b[i]) flag = true;
}
return flag;
});
}

较优解答为:

function array_diff(a, b) {
return a.filter(function(x) { return b.indexOf(x) == -1; });
}

分析:

对数组a使用filter()方法,迭代判断数组a中的值是否存在于数组b中。当x的值,即数组a的值不能在数组b中找到时,b.indexOf()方法将返回-1。数组的filter()方法是指对数组中的每一项运行给定函数,返回该函数会返回true的项组成的的数组。
我的思路就稍微想得复杂了,对数组进行迭代的方法filter()是想到了,却没有好好地利用起来,函数内的判断方法不够简洁,也没有想到可以使用indexOf()方法进行判断。
 

笔记:

filter()方法,是指对数组中的每一项运行给定函数,返回该函数会返回true的项组成的的数组。利用指定的函数确定是否在返回的数组中包含某一项。
 
使用例子:
var numbers = [1,2,3,4,5,4,3,2,1];
var filterResult = numbers.filter(function(item,index,array) {
     return (item>2);
});
alter(filterResult); //[3,4,5,4,3]
 
数组的迭代方法真的很常用的,用于对某个数组循环某一操作。这些迭代方法要比for循环语句简单很多,要记住!
共有五个迭代方法:every()、filter()、forEach()、map()、some()。
 

基础练习(2):
 
我的解答为:
var gimme = function (inputArray) {
var newArray = [];
for(var i=0;i<inputArray.length;i++) {
newArray[i] = inputArray[i];
}
newArray.sort(function(a,b) {
if(a < b) {
return -1;
} else if (a> b) {
return 1;
} else {
return 0;
}
});
return inputArray.indexOf(newArray[1]);
};

较优解答为:

function gimme(a) {
return a.indexOf(a.concat().sort(function(a, b) { return a - b })[1])
}

分析:

在较优解答中,对原数组使用了concat()方法,该方法可以将原数组复制并创建一个新数组。接着对新数组进行排序,并对于中间值求得索引值。
我的思路和最优解是一样的,而实现方法还是稚嫩了一些。对于创建新数组不知道可以使用concat()方法进行快速地复制,也说明对基础知识的熟悉程度不够了。另外排序方法中,原来可以直接使用“return a-b”,我的方法就显得很累赘了。
 

笔记:

concat()方法可基于当前数组中的所有项创建一个新数组。该方法会先创建当前数组的一个副本,将接收到的参数添加到这个副本的末尾,最后返回新构建的数组。在没有给concat()方法传递参数的情况下,它只是复制。若传递给concat()方法的是一个或多个数组,则该方法会将这些数组中的每一项都添加到结果数组中。若传递值不是数组,则添加到结果数组的末尾。
 
使用例子:
var colors = ["red","green","blue"];
var colors = colors.concat("yellow",["black","brown"]);
alert(colors); // red,green,blue
alert(colors); // red,green,blue,yellow,black,brown
 
重排序方法:使用sort()方法可以进行排序,但仍可能会出现一些问题,因此使用比较函数,可以避免这个问题。
对于大多数数据类型可使用,只需要将其作为参数传递给sort()方法即可:
function compare(value1,value2) {
     if(value1 < value2) {
          return -1;
     } else if (value1> value2) {
          return 1;
     } else {
          returm 0;
     }
}
对于数值型或其他valueOf()方法会返回数值类型的对象类型,可以使用更简单的比较函数:
function compare(value1,value2) {
     return value2 - value1;
}
 

基础练习(3):
 

我的解答为:

function minMax(arr){
var newarr = [];
newarr.push(Math.min.apply(Math,arr));
newarr.push(Math.max.apply(Math,arr));
return newarr;
}

较优解答为:

function minMax(arr){
return [Math.min(...arr), Math.max(...arr)];
}

分析:

这道题目就很简单了,较优解答中的扩展语法( spread syntax)也在练习一中提及了。我的写法还是太谨慎了,是不是应该大胆一些呢?
 

基础练习(4):
 

我的解答为:

function XO(str) {
var str = str.toLowerCase();
var countx = 0;
var counto = 0;
for(var i=0;i<str.length;i++) {
if(str[i] === "x") {
countx++;
}
if(str[i] === "o") {
counto++;
}
}
if(counto == countx) {
return true;
} else {
return false;
}
}

较优解答为:

function XO(str) {
var a = str.replace(/x/gi, ''),
b = str.replace(/o/gi, '');
return a.length === b.length;
}

分析:

较优解使用的是replace()方法,结合正则表达式的使用,对原字符串str分别将x和o用空字符串替换得到a和b字符串,比较a和b字符串的长度,从而得到结果。我的解答方法呢,因为实在想不到可以使用什么方法,所以用的最原始的方法,仿佛自己在做C语言的题目。
 
笔记:
replace()方法,该方法接受两个参数,一个参数可以是一个RegExp对象或者一个字符串,第二个参数可以是一个字符串或者是一个函数。若第一个参数是字符串,指挥替换第一个子字符串。要想替换所有子字符串,是提供一个正则表达式,并且指定全局标志。
 
使用例子:
var text = "cat,bat,sat,fat";
var result = text.replace("at","ond");
alert(result); //"cond,bat,sat,fat"
 
result = text.replace(/at/g,"ond");
alert(result); //"cond,bond,song,fond"
 

 总结:
今天的知识点主要是数组的迭代方法中的一种filter()方法、数组操作方法中的concat()方法以及字符串的replace()方法。filter()方法可用于使用函数判断数组中各项的值中返回true值的结果所组成的数组。concat()可以复制和创建新数组。而replace()方法可以替换字符串中的一个或多个值。
从这三天的练习来看,对于数组的各种方法也逐渐使用得熟练起来了。但是其他类型的各种方法还是一种挑战。而我的解答也要从比较冗余的语句,写出更为简洁而有效的语句了。继续加油吧!
 
 

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

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

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

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

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

  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. 布客&#183;ApacheCN 翻译/校对/笔记整理活动进度公告 2020.1

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

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

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

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

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

  9. Deep Learning(深度学习)学习笔记整理系列之(八)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

随机推荐

  1. Java基础之equals方法和"= ="的区别

    ==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符. 如果一个变量指向的数据是对象类型的 ...

  2. [刷题]算法竞赛入门经典(第2版) 5-5/UVa10391 - Compound Words

    题意:问在一个词典里,那些单词是复合词,即哪些单词是由两个单词拼出来的. 渣渣代码:(Accepted, 30ms) //UVa10391 - Compound Words #include<i ...

  3. 【踩坑】360安全浏览器“极速模式”和“兼容模式”,套路还是bug?

    分享踩坑点: 项目中需要兼容360安全浏览器,大家当然都希望用极速模式打开网站,但是发现总是被兼容模式打开 网址类似 aa.xx.dd.com 网上找了很多地方,有以下两种方法 1.<meta ...

  4. 互联网金融P2P主业务场景自动化测试

            互联网金融P2P行业,近三年来发展迅速,如火如荼.         据不完全统计,全国有3000+的企业.  “互联网+”企业,几乎每天都会碰到一些奇奇怪怪的bug,作为在互联网企业工 ...

  5. 用css3过滤做遮罩效果

    <!DOCTYPE html><html ng-app="myApp" ng-controller="myController">< ...

  6. 前端设计技巧——用 Promise 处理交互和异步

    本文仅表达前端的一些设计技巧,如果您在查阅js技术,请忽略此文! 前端开发经常会遇到这样的场景: 当满足一定条件时,需要弹出一个模态框,以便接收用户的输入.然后根据不同的输入,进行不用的操作. (ps ...

  7. [原创]CentOS下Radius服务器搭建

    一.   实现环境: 1.系统:CentOS  release  6.6 (Final) 2.需要软件包: 1) freeradius-2.1.12-6.e16.x86_64 freeradius-m ...

  8. [c++]大数运算1---利用C++ string实现任意长度正小数、整数之间的加减法

    一.概述 本文属于大大维原创,未经笔者本人允许,严禁转载!!! C/C++中的int类型能表示的范围是-2E31-2E31–1.unsigned类型能表示的范围是0-2E32–1,即 0-429496 ...

  9. 利用wget检测网页是否正常访问

    #!/bin/bash function CheckUrl() { timeout=5 fails=0 success=0 while true do wget --timeout=5 --tries ...

  10. flash2print文档在线预览应用(java,.net)

    一.背景 前段时间,LZ的boss突然给了出了这样一个需求:将原项目中的所有文章关联的附件TXT.PDF.office相关文件全部以flash的形式在网页上进行展示,便于预览.看似简单的需求,整个研发 ...