`

javaScript之数组

阅读更多
//测试Chrome版本  40.0.2214.115 m

//如有问题,欢迎指出
//=====数组的声明方式 有两种
//对数组的一些常用方法进行深入
//var arr1=new Array[3];//数组的长度 //这是错误的
var arr1=new Array(3);
var arr2=new Array(3,2,3,5);
var arr3=new Array([1,2,3,4],[1,2,3],[1,2]);
//字面量
var arr4=[[2,3],[2],[0]];
//console.info(arr1);
//console.info(arr2);
//console.info(arr3);
//console.info(arr4);
//-----------------------------------------------
//========数组有两种方法遍历
//第一种
for(var i=0;i<arr2.length;i++){
	console.info(arr2[i]);
}
//第二种
for(var i in arr3){
	console.info(arr3[i]);
}

//=========操作数组的一些方法
//按栈和队列来
//第一种出入栈
arr3.push(44);//在数组的最后添加一个
console.info(arr3);//[Array[4], Array[3], Array[2], 44]
console.info(arr3.pop());//弹出最后一个元素,并且返回其值
//队列
//先进
arr3.unshift(33);
console.info(arr3);
console.info(arr3.shift());//弹出头部元素,返回删除的值 
console.info(arr3);

//将数组合并   //算是向一个数组中添加一个数组的元素
//注意一个问题就是它不会改变数组现有的值,只是返回一个副本
console.info(arr1.concat(arr2));//这显示数组长度虽为7,里面元素只是arr2中的元素
//console.info(arr1);
document.write(arr2.concat(arr2));
console.info(arr3.concat(arr1,arr2));
console.info(arr3);//只是返回副本

//=====将数组转化为字符串,再将字符串转化为数组
var str1=arr2.join(",");//转化
console.info(str1);   
console.info(str1.split(",")); //  再转化   //此时数组里面的数字为字符串类型

//转化为字符串的还有其它的方法,如
var str33=[1,1,1,1,1];//还有toLocalString就不说了,我基本上是没用过
console.info(str33.toString());

//===对数组进行排序
//注意一个问题
//1默认是按字符串排序  (可添加方法参数来改变)
//降序来一个
console.info(arr2.sort(function(val1,val2){
	if(val1>val2){
		return -1;//如果大于不改变顺序
	}else {
		return 1;//否则
	}
}));

//另一个就是翻转数组了,感觉没什么用
console.info(arr2.reverse());

//对数组进行截取 splice 与slice
var arr5=[1,2,3,4,5,6,7,8,9];
console.info(arr5.slice());//返回原数组
console.info(arr5.slice(-2,9))//[8, 9]
//对于一个函数 //在jQuery中经常有这样类似的用法
var slice=[].slice;
function aa(){
	console.info(arguments);
	console.info(slice.call(arguments,1));
}
aa("sfsd","fs","fdsa");

//对于这splice参数不同作用不同
//第一种两个参数时
//第一个参数是要删除的起始下标
//第二个参数是要删除的项数
var arr6=[1,2,3,4,5,6,7,8,9];
console.info(arr6.splice(2,2));//删除的是 0: 3 1: 4
console.info(arr6);
//当是三个参数时,就是下面这种情况
//第一个参数是起始下标
//第二个参数是删除的项数
//第三个参数是插入的项数 形如:item1,item2...

//总结过来就是,第二个参数为0时就是插入了,有第二个项就是先删,再插
console.info(arr6.splice(2,0,3,4));//[]无返回值
console.info(arr6);//[1, 2, 3, 4, 5, 6, 7, 8, 9]

//再者就是新添加的数组方法了
//对比jQuery做个比较
//第一个indexOf 和lastIndexOf
//第一个参数要找的项,第二个参数是从哪里找,用法简单,实现原理也是简单
console.info(arr6.indexOf(7,5));//返回6 //这是下标
//方法一出来的时候ie是不支持的那么就是这种兼容处理了
//下面方法只是随便写,没有运行测试
if(typeof(Array.prototype.indexOf)!=="function"){
	Array.prototype.indexOf=function(){
		var 
			value=arguments[0];
			i=arguments[1] || 0;
			for(;i<this.length;i++){
				if(value===this[i]){
					return i;
				}else if(i==this.length-1){
					return -1;
				}
			}
		
	}
}

//主要关注这些方法 forEach,map ,some,every,filter
//此处涉及回调函数的应用
//上述方法也很有可能涉及兼容问题
//forEach(arr6,console.info);
//拿forEach与some做个例子
var each=function(obj,callback){
	var 
		value,
		length=obj.length,
		i=0;
		for(;i<length;i++){
			//若是返回false,则直接跳出
			value=callback.call(obj,i,obj[i]);
			if(value===false){
				break;
			}
		}
		
	return obj;
};


console.info(each(arr6,function(_,value){
	alert(value);
}));

//实现some
//只要数组有一个符合,立刻跳出,并显示跳出时的值
//直接使用上面的方法就可以得到想要的
console.info(each(arr6,function(_,value){
	if(value>5){
		alert(value);
		return false;
	}
}));

//到此结束

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics