数组
- 数组的定义
字面量;
var arr = new Array(length/content)
- 数组的读与写
不可以溢出读,会返回undefined
但可以溢出写,中间是empty,(这样操作后应该是类数组了!——个人看法!需要求证!)
ECMAScript DOM BOM 是js 三部分!
不同浏览器在DOM 和 BOM上有区别!尤其是BOM!操作浏览器的BOM!
es3.0 es5.0 es6.0
- 数组常用的几种方法!
- 改变原数组
7种方法:push,pop,unshift,shift,splice,reverse,sort - 不改变原数组
- concat,join<->split(str),toString,slice
- push:在数组最后一位添加
返回数组的长度!
push方法的重写:
var arr = [1,2,3];
Array.prototype.push = function(){
for(var i = 0 ;i < arguments.length;i++){
this[this.length] = arguments[i];
}
return this.length;
}
- pop:剪切数组最后一位,传参没有卵用
在这里插入图片描述
返回的值还是数组长度!
pop方法重写:
var arr = [1, 2, 3];
Array.prototype.pop = function() {
var popValue = this[this.length - 1];
this.length--;
return popValue;
};
- shift unshift:在数组开头 减和加1位
unshift添加需要参数!shift删除不需要参数!
unshift方法重写:
var arr = [1, 2, 3];
Array.prototype.unshift = function() {
var len = arguments.length,
arg = [];
for (var j = 0; j < len; j++) {
arg[j] = arguments[j];
}
for (var i = 0; i < this.length; i++) {
arg[arg.len + i] = arg.push(this[i]);
}
return arg;
};
这种方法不好!要返回长度的话,arr没有发生改变!
- reverse:逆序排列
方法重写:
var arr = [1, 2, 3];
Array.prototype.reverse = function() {
var len = this.length,
revArr = [];
for (var i = 0; i < len; i++) {
revArr[i] = this[len - i - 1];
}
arr = revArr;
return arr;
};
- splice:切片(从第几位开始,截取的长度,在切口处添加新的数据)
在某一个位置添加,可用于重写unshift
参数为负的起始位
- sort:按asc码升序排序
所以系统给我们留下一个接口,让我们自己编写排序规则
var arr = [1, 2, 6, 5, 20, 11];
//必须有两个参数
//看返回值,若返回值为负,那么前面的数放到前面
// 若返回值为正,那么后面的数放到前面
arr.sort(function(a, b) {
return a - b;
// return b-a;降序
});
给一个有序的数组乱序(哈哈!)
var arr = [1, 2, 5, 6, 11, 20];
//必须有两个参数
//看返回值,若返回值为负,那么前面的数放到前面
// 若返回值为正,那么后面的数放到前面
arr.sort(function(a, b) {
return Math.random() - 0.5;
// return b-a;降序
});
每次刷新都不同!
按对象的某个值排序对象
扫描二维码关注公众号,回复:
10457981 查看本文章
var obj = {
age: 185
};
obj1 = {
age: 195
};
obj2 = {
age: 20
};
arr = [obj, obj1, obj2];
//必须有两个参数
//看返回值,若返回值为负,那么前面的数放到前面
// 若返回值为正,那么后面的数放到前面
arr.sort(function(a, b) {
return a.age - b.age;
// return b-a;降序
});
按字节排序:
function retBytes(str) {
var num = str.length;
for (var i = 0; i < str.length; i++) {
if (str.charCodeAt(i) > 255) {
num++;
}
}
}
var arr = ["sfjslj", "a", "b", "c", "wangjia"];
arr.sort(function(a, b) {
return retBytes(a) - retBytes(b);
});
- concat:连接两个数组(不能改变原数组)
-slice:(从第几位开始截取,截取到该位)
注意他与splice的区别!
-toString():这就不用说了吧!
类数组(可以当数组用的非数组)
arguments就是个类数组
属性要为索引(数字)属性,必须要有length,最好加push,
再加上splice方法后变为数组
阿里原题:
var obj = {
"2": "a",
"3": "b",
length: 2,
push: Array.prototype.push
// splice: Array.prototype.splice
};
obj.push("c");
obj.push("d");
var obj = {
"0": "s",
"1": "ss",
"2": "a",
"3": "b",
length: 4,
name: wangjia,
age: 23,
push: Array.prototype.push,
splice: Array.prototype.splice
};