[从codewars学习到的JS系列3]数组filter方法与函数call方法妙用
2016-06-30 21:26
676 查看
<level2>问题:去除字符串或数组里相邻重复的项,并以数组形式输出结果。如输入[“a”,“b”,“b”,“c”,“a”,“a”],输出[“a”,“b”,“c”,“a”],字符串同理,输出数组。
solution:
(1)
(2)
(3)
(4)
说明:
前两个方法比较相似,思路都值得借鉴,第一个方法巧用indexOf(“a”)返回的始终是第一次找到”a”的位置的特性,第二个方法思路没第一个那么复杂,不过利用到了JS中数组索引超出数组长度不会报错,只是取到的值是undefined这么一个特性,也少了些判断。
第三个方法思路更好,少了多次从数组取值的操作,另外将last=iterable[i]赋值操作直接写在push方法里,传进去的参数其实就是iterable[i],同时赋值给last罢了,简的不能再简。
第四个方法最聪明,利用函数都有的call方法,将数组专属方法filter运行的作用域扩展到string上,由于array和string获取数据操作相同,都可以obj[index]形式来获取,因此在string上调用filter也不会出错。call里传入两个参数,第一个就是在其中运行函数的作用域,第二个是filter方法的参数,即一个回调函数,iterable[i - 1] !== a这里iterable数据类型是array或是string都不会出错,str[-1],arr[-1]都会返回undefined。
solution:
(1)
var uniqueInOrder=function(iterable){ var result = []; for (var i = 0, length = iterable.length; i < length; i++){ if (iterable.indexOf(iterable[i]) !== iterable.indexOf(iterable[i + 1])) { result.push(iterable[i]); } } return result; }
(2)
var uniqueInOrder=function(iterable){ var array = []; for(var i=0; i<iterable.length;i++){ if(iterable[i+1] != iterable[i]){ array.push(iterable[i]); } } return arra 4000 y; }
(3)
function uniqueInOrder(iterable) { var result = []; var last; for (var i = 0; i < iterable.length; i++) { if (iterable[i] !== last) { result.push(last = iterable[i]); } } return result; }
(4)
var uniqueInOrder = function (iterable) { return [].filter.call(iterable, (function (a, i) { return iterable[i - 1] !== a })); }
说明:
前两个方法比较相似,思路都值得借鉴,第一个方法巧用indexOf(“a”)返回的始终是第一次找到”a”的位置的特性,第二个方法思路没第一个那么复杂,不过利用到了JS中数组索引超出数组长度不会报错,只是取到的值是undefined这么一个特性,也少了些判断。
第三个方法思路更好,少了多次从数组取值的操作,另外将last=iterable[i]赋值操作直接写在push方法里,传进去的参数其实就是iterable[i],同时赋值给last罢了,简的不能再简。
第四个方法最聪明,利用函数都有的call方法,将数组专属方法filter运行的作用域扩展到string上,由于array和string获取数据操作相同,都可以obj[index]形式来获取,因此在string上调用filter也不会出错。call里传入两个参数,第一个就是在其中运行函数的作用域,第二个是filter方法的参数,即一个回调函数,iterable[i - 1] !== a这里iterable数据类型是array或是string都不会出错,str[-1],arr[-1]都会返回undefined。
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- jQuery plugin items filter
- javascript实现10进制转为N进制数
- 最后一次说说闭包
- Ajax
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- Redux系列02:一个炒鸡简单的react+redux例子
- JavaScript 各种遍历方式详解