浅谈数组算法slice
来源:互联网 发布:无头骑士异闻录 知乎 编辑:程序博客网 时间:2024/06/02 00:44
作为一个刚接触js的小白,对于数组原型中的方法还是有些不了解。
由于可能自己爱转牛角尖的性格,总喜欢去深挖低层算法,在这呢我就给大家分享一下我的slice()算法要写一个算法就得看看这个函数想要实现的功能,所以之前呢就应该对slice()这个函数做一些测试;
比如:
//[不传参数var arr = [1,5,3,4,6,9,4];console.log(arr.slice()); //[1, 5, 3, 4, 6, 9, 4] //传一个不同类型参数console.log(arr.slice(undefined));//[1, 5, 3, 4, 6, 9, 4]console.log(arr.slice(true)); //[5, 3, 4, 6, 9, 4]console.log(arr.slice(-1)); //[4console.log(arr.slice()); //[5, 3, 4, 6, 9, 4]]console.log(arr.slice(NaN));//[1, 5, 3, 4, 6, 9, 4]
由上我们可以总结一些规则就是,在函数体中,函数会把参数列表中的参数使用Number()函数转换为Number类型,在去完成函数切割功能;因此当我们传如两个参数我们就知道它的规律啦,这里我就不测试了,有兴趣的可以自行研究。
接下来,我们就可以开始写算法啦
刚开始我们要注意函数的传参问题,因为slice()函数是可以传入多个参数的,这点一定要注意,因此我们是不能够直接去定义它的参数个数,可以用一种比较取巧的方法,就是我们不去设置它的参数个数,让函数本身去判断
var a = Number(arguments[0]) ? arguments[0] : 0,//设置第一个参数的默认值为0b = Number(arguments[1]) ? arguments[1] : 0; //当参数为NaN,undefined,false,null,'',''时为0
这样我们就解决了参数个数问题,下面是函数整个算法
Array.prototype.slice = function() {var that = this,arr = [],a = arguments[0] ? (arguments[0]>=0 ? Math.floor(arguments[0]) : ((that.length - Math.abs(Math.ceil(arguments[0])))>0 ? (that.length - Math.abs(Math.ceil(arguments[0]))) : 0)) : 0,//设置第一个参数的默认值为0b = arguments[1] ? (arguments[1]>=0 ? Math.floor(arguments[1]) : ((that.length - Math.abs(Math.ceil(arguments[1])))>0 ? (that.length - Math.abs(Math.ceil(arguments[1]))) : 0)) : 0; //当参数为NaN,undefined,false,null,'',''时为0if(arguments.length > 1){for(var i = 0;i<(b-a) && i<that.length-a;i++){//这里需考虑截取数组的长度,如果单单只考虑i<(b-a),就会出现当b-a无限大,且a>0;数组中就会出现undefinedarr[i] = that[a+i];}}else{for(var i = 0;i<that.length-a;i++){arr[i] = that[a+i];}}return arr;};
如果在看的您对于此算法有更好的算法或理解,可以和大家一起分享,谢谢观看!!
阅读全文
0 0
- 浅谈数组算法slice
- 通过Arrary.prototype.slice.call浅谈类数组
- 截取数组元素slice
- 数组 slice 和splice
- Slice Smapling算法
- JavaScript数组slice方法详解
- golang 数组 slice 乱序
- go的数组与slice
- 数组中sort slice pop
- 浅谈javascript的Array.prototype.slice.call
- 浅谈javascript的Array.prototype.slice.call
- 数组的slice方法和类数组
- slice
- slice
- [].slice
- slice
- slice
- slice
- C#解析JSON字符串总结
- 读懂正则表达式就这么简单
- K-means聚类分析与python实现
- jQuery的load方法设计动态加载及解决被加载页面js
- http://blog.csdn.net/u013142781
- 浅谈数组算法slice
- 配置你自己独一无二的vim
- codeforces Remove Extra One(思维)
- java Semaphore 计数信号量
- 异常处理-三角形
- 用file_get_contents抓取网页乱码的2种解决方式
- 推荐给喜欢挑战编程的学生
- angularjs 点击div外面,隐藏该div
- spring-prifile各环境配置