Js中的数组
(一)数组类型检测的方法
因为用typeof来检测数组类型,获得的是“object”,因此根本不能真正准确地检测出数组类型,能够自定义下面一种方法:
var is_array = function(value){
return value && typeof value === "object" && value.constructor === Array;
};
可是,上面的函数在识别从不一样的window或者frame中构造的数组时会失效,要想准确地检测外部数组类型,还须要进一步地完善该函数
var is_array = function(value){
return value &&
typeof value === 'object' &&
value.constructor === Array &&
typeof value.length === 'number' &&
typeof value.splice === 'function' &&
!(value.propertyIsEnumerable('length'));
};
下面这种方法也能够检测出来,并且更加简洁:
var is_array = function(value){
return Object.prototype.toString.apply(value) ==='[object Array]';
};
(二)删除数组元素的方法
删除数组元素有方法有不少种,最简单的方法就是利用length属性来截断数组,可是这种方法比较笨拙,仅可以在尾部截断数组元素,在JavaScript中,因为数组其实就是对象,所以使用delete运算符能够从数组中移除元素。
例如:var number = [1,2,3,4,5,6];
delete number[2]; //1,2,undefined,4,5,6
这种删除数组的方法,只能删除指定位置下标的元素,而且会在数组中遗留一个空洞,这是由于排在被删除元素以后的元素仅保留了它们最初的名字(下标位置),而咱们一般须要后面元素的下标值能够依次减一,也就是向前排一位。
这种效果能够用splice方法来实现,splice方法的第一个参数是数组中的一个序号,第二个参数是要删除的元素个数,任何额外的参数都会在序号那个点的位置被插入到数组中,例如:
var number = [1,2,3,4,5,6];
number.splice(2,1);//1,2,4,5,6
(三)数组的排序函数sort()
按从小到大进行排序数组:
function f(a,b){
return a-b;
}
var arr = [1,2,3,4,5,6];
arr.sort(f);
按从大到小对数组进行排序:
function f(a,b){
return b-a;
}
var arr = [1,2,3,4,5,6];
arr.sort(f);
实现偶数排在前面,奇数排在后面:
function f(a,b){
var a = a % 2;
var b = b % 2;
if(a==0) return -1;
if(b==0) return 1;
}
var arr = [1,4,5,6,1,3,7,8];
arr.sort(f);
console.log(arr);
若须要奇数排在前面,偶数排在后面:
function f(a,b){
var a = a % 2;
var b = b % 2;
if(a==0) return 1;
if(b==0) return -1;
}
var arr = [1,4,5,6,1,3,7,8];
arr.sort(f);
console.log(arr);
不区分字母大小进行排序:
function f (a,b){
var a = a.toLowerCase;
var b = b.toLowerCase;
if(a < b){
return;
}else{
return -1;
}
}
var arr = ["aB","Ab","Ba","bA"];
arr.sort(f);
(四)数组的下标
在JavaScript中,数组下标不必定必须是大于或者等于0的整数,能够为任意表达式,甚至能够是任意类型数据,可是使用length属性检测的时候,返回值为0,说明数组并无增长长度,可是使用数组下标仍然能够获得相应的数组元素值,例如:
var a = [];
a[name] = 'Tom';
alert(a.length); // 0
alert(a[name]); // Tom
(五)使用arguments模拟重载
在javas中,每一个函数内部均可以使用arguments对象,该对象包含了函数被调用时的实际参数值,arguments对象虽然在功能上和数组有些相似,可是它不是数组,arguments对象与数组的相似体如今他有一个length属性,同时实际参数的值能够经过[]操做符来获取,可是arguments对象并无数组可使用的push,pop,splice等方法,其缘由是arguments对象的prototype只想的是object.prototype,而不死Array.prototype.
其余语言都支持方法重载,可是JavaScript并不支持这种方式的重载,这是由于JavaScript中的function对象也是以属性的形式出现的,在一个对象中增长与已有function同名的新function时,旧的function对象会被新的覆盖,不过能够经过使用arguments来模拟重载,其实现机制是经过判断arguments中实际参数的个数和类型来执行不一样的逻辑。
例如:
funtion sayHello(){
switch(arguments.length){
case 0:
return "hello";
break;
case 1:
return "hello"+ arguments[0];
break;
case 2:
return "hello"+ arguments[0] + arguments[1];
break;
}
}
java