用for循环重写js数组的api(上-不改变原数组)

首先我们先了解常见的数组api(不改变原数组)

数组api属性
concat()合并数组,并返回合并之后的数组
indexof()查找并返回查找数据的索引
lastIndexOf()倒着查找并返回查找数据的索引
join()将数组转字符串/替换分隔符号
toString()将数组转字符串
forEach()遍历数组所有的项
slice()截取指定位置的数组

首先创建一个用于修改数组

var arr = [1,2,3,4,5];

再创建一个存储返回结果的空数组

var att = [];

开始对arr数组的api进行重写

arr.__proto__ = {
	//解析多维数组
	flat:function (...arr) {
		var num = 0;
	    for(var i = 0; i < arr.length; i++){
	        if(Array.isArray(arr[i])){
	           	this.flat(...arr[i]);
	        }else {
	        	att[num] = arr[i];
	        	num++;
	        }
	    }
	    return att;
	},
	//concat()合并
	_concat:function(...para){
		this.flat(...para);
		var arr1 = [];
		arr1.length = this.length + att.length;
		for(var i = 0; i < arr1.length; i ++){
			arr1[i] = (i < this.length) ? this[i] : att[i-this.length];					
		}
		return arr1
	},
	//indexof()查找
	_indexof:function(index){
		for(var i = 0; i < this.length; i ++){
			if(this[i] === index){
				return i;
			}
		}
	},
	//lastIndexOf()倒着查找
	_lastIndexOf:function(index){
		for(var i = this.length - 1; i > -1; i --){
			if(this[i] === index){
				return this.length - 1 - i
			}
		}
	},
	//join()转字符串/替换逗号
	_join:function(str){
		var stn = "";
		for(var i = 0; i < this.length; i ++){
			stn += this[i] + (str === undefined ? "" : (i === this.length -1 ? "" : "" + str))
		}
		return stn;
	},
	//toString()转字符串
	_toString:function(){
		var stn = "";
		for(var i = 0; i < this.length; i ++){
			stn += this[i] + (i === this.length -1 ? "" : ",");
		}
		return stn;
	},
	fore:function(arra,st,len){
		var nu = 0;
		for(var i = st; i < len; i ++){
			arra[nu] = this[i];
			nu++;
		}
		return arra;
	},//封装foreach循环
	_slice:function(start,end){
		var att = new Array();
		var fu = this.length - 1 + start;
		if((typeof(start) === "number") && (end === undefined)){
			this.fore(att,(start >= 0 ? start:fu),this.length);
		}else if((typeof(start) === "number") && (typeof(end) === "number")){
			if(start >= 0){
				start < end?this.fore(att,start,end):"";
			}else{
				end >= 0?(fu < end?this.fore(att,fu,end):"") : ((-start)>(-end)?this.fore(att,fu + 1,this.length + end):"")
			}
		}else{
			return arr;
		}
		return att;
	},//slice()截取数组
}

以上均为菜鸟新手编译,有问题请指出感谢!!!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值