js-数组
数组的定义
- new Array(length/content)
- 字面量
- 区别:当只传一个参数时,new Array会把参数当成是长度,即创建一个限定长度的值为undefined的数组;字面量则认为这一个参数是数组第一个元素。
//数组的定义
var arr = [1,2,3];//数组字面量
var arr1 = new Array(1,2,3,4,5);
var arr2 = new Array(10);//[object Array]: [, , , , , , , , , ];length: "10"
var arr3 = [10];//[object Array]: [10];length: "1"
数组的读和写
- 读:arr[num];//不能溢出读,结果为undefined
- 写:arr[num] = xxx; //可以溢出写
数组常用的方法 (基于ES3.0)
1.改变原数组
- push, pop, shift, unshift, reverse,sort
- splice
//数组常用的方法
//1.push--在数组末尾添加元素
var arr = [1,2,3];
Array.prototype.push = function(num){
for(var i = 0;i < arguments.length; i++){
this[this.length] = arguments[i];
}
return this.length;
}
arr.push(4,5,6);//[1,2,3,4,5,6]
//2.pop--从数组后面剪切最后一个元素,返回被剪切的元素
arr.pop();//[1,2,3,4,5]
//3.shift--从数组前面剪切
arr.shift();//[2,3,4,5]
//4.unshift--从数组前面插入
arr.unshift(0,0);//[0,0,2,3,4,5]
//5.reverse--数组元素反转
arr.reverse();//[5,4,3,2,0,0]
//6.splice--截取数组,在特定位置添加元素;arr.splice(从第几位开始,截取几位,在切口处添加新的数据);
arr.splice(1,3,0,0);//[5,0,0,0,0]
//7.sort--数组元素排序
var arr1 = [2,3,1,-1,0,9];
arr1.sort();//[-1,0,1,2,3,9]
var arr2 = [1,3,4,2,10];
arr2.sort();//[1,10,2,3,4];按ASCII码排序
//重写sort函数:1)一定要写两个参数;2)看返回值:①当返回值为负数时,那么前面的数放在前面;②为整数,后面的数放在前;③为0,不动
arr2.sort(function(a,b){
return a<b?-1:1;//return a-b;//升序
//return a>b?-1:1;//return b-a;//降序
});
//sort方法的其他拓展
//给一个有序的数组返回随机的乱序数组
var arr3 = [1,2,3,4,5,6];
arr3.sort(function (a,b){
return Math.random()-0.5;
});
var chen = {
name:"chen",
age:10,
gender:"female"
};
var cheng = {
name:'deng',
age:30,
gender:'undefined'
};
var he = {
name:'he',
age:40,
gender:'male'
};
var arr4 = [chen,he,cheng];
arr4.sort(function(a,b){
return a.age - b.age;
});
var arr5 = ['a','sdffeee','df陈陈陈陈','dweshyrrebe','dfrfa'];
arr5.sort(function(a,b){
// return a.length-b.length;//按字符串长度排序
return retBytes(a)-retBytes(b);//按字符串字节长度排序
});
function retBytes(a){
var cnt = 0;
for(var i = 0;i < a.length;i++){
(a.charCodeAt(i)>255) ? ++cnt : cnt;
}
var res = a.length + cnt;
return res;
}
2.不改变原数组
- concat, join --> split, toString, slice
//不改变原数组
//1.concat
var arr = [1,3,4];
var arr1 = [4,5,6,9];
var arr2 = arr.concat(arr1);
console.log(arr);//[1,3,4]
console.log(arr1);//[4,5,6,9]
console.log(arr2);//[1,3,4,4,5,6,9]
//2. toString -- 把数组重写成字符串
toString(arr);
console.log(arr);
//3. join--把数组用特定字符连接成字符串
var str = arr.join("-");//"1-3-4"
str = arr.join("");//"134"
//4. split--把字符串分割成一个字符串数组
var str1 = 'andnjhskj,sjvshv';
console.log(str1.split(','));//["andnjhskj","sjvshv"]
console.log(str1.split(',',1));//["andnjhskj"]
//5. slice--从已有数组中返回选定的元素
var arr3 = [1,2,3,4];//arr.slice(开始截取的位置,直到这一位之前)
console.log(arr3.slice(1,3));//[2,3]
类数组
- 类数组 --> 属性要为索引属性,必须要有length属性,最好加上push。
var obj = {
"2":"a",
"3":"b",
"length":2,
"push":Array.prototype.push,
"splice":Array.prototype.splice
}
obj.push("c");
obj.push("d");
console.log(obj);//[obj] = {"2":"c","3":"d","length":4,"push":Array.prototype.push,"splice":Array.prototype.splice}
//因为Obj的push是根据length对应的位置添加的,而原对象里面的length=2,即第一个元素的key名称。
//push 原理
Array.prototype.push = function push(target){
obj[obj.length] = target;
obj.length++;
}
.Net开发环境配置[OS/IIS/VS...]
一、单件模式
正则表达式调试器1.1
C#2.0新特性系列文章转载
巧用VS2005解决VS2005网站发布不便问题
配置VS2005,加速VS2005运行速度
转载:ASP.NET运行机制 和 图片盗链问题
ASP.NET页面提前处理问题
关于NTLM认证的python和.NET实现