1. 数组创建
// 1. 字面量方法
var arr = [];
// 2. 通过内置的Array构造函数声明数组 不推荐这种写法
var arr = new Array();
// 3. new 可以不写
var arr = Array();
// 所有数组都继承 Array.prototype
1. 数组是另一种形式的对象
var arr = [1, 2, 3, 4, 5];
// 0 1 2 3 4
// index: 数组元素对的下标(索引值)
var obj = {
0: 1,
1: 2,
2: 3,
3: 4,
4: 5
}
console.log(arr[2]);
console.log(obj[2]);
2. 稀松数组
// 数组中最后边的,不会添加empty
var arr = [,,];
console.log(arr); // [empty x 2]
console.log(arr[0]); // undefined
3. 构造函数创建数组
// 1. 不填参数
var arr = new Array();
console.log(arr); // []
// 2. 1位参数
var arr = new Array(5);
console.log(arr); // [empty x 5]
// 3. 2位参数及以上
var arr = new Array(5, 10);
console.log(arr); // [5, 10]
// 4. 开头中间不允许使用, 添加empty
var arr = new Array(, 10); // ✖
var arr = new Array(10,,1); // ✖
var arr = new Array(1, 2,); // 可以
2.数组的方法
1. push/unshift
// 返回值 执行后数组的长度
// push
var arr = [1, 2, 3];
arr.push(5);
console.log(arr); // [1, 3, 4, 5]
arr.push('a','b');
console.log(arr); // [1, 3, 4, 5, a, b];
// unshift
var arr = [1, 3, 4];
arr.unshift('a');
console.log(arr);// ['a', 1, 3, 4]
// 手动实现push
Array.prototype.myPush = function(){
for(var i = 0; i < arguments.length; i++){
var item = arguments[i];
this[this.length] = item;
}
return this.length;
}
2. pop/unshift
// 返回被删除的元素
// pop删除数组的最后一位
var arr = [1, 2, 3];
arr.pop(); // 返回删除的元素
console.log(arr); // [1, 2]
// unshift 删除数组的第一位
var arr = [1, 2, 3];
arr.unshift();
console.log(arr); // [2, 3]
3. reverse
// 返回翻转后的数组
var arr = [1, 2, 3];
arr.reverse();
console.log(arr); // [3, 2, 1]
4. splice
//array.splice(start[, deleteCount[, item1[, item2[, ...]]]])
var arr = [1, 3, 4];
// 1. 一个参数,代表起始项,删除到末尾
arr.splice(2);
// 2. start deleteCount
arr.splice(0, 2);
console.log(arr);
// 3.start, deleteCount, items添加项
arr.splice(0, 1, 'l', 'o', 'v', 'e');
console.log(arr);
var arr = [1, 3, 4, 5, 6, 7, 8];
// 负数从末尾开始数
arr.splice(-4, 3,'a');
console.log(arr);
// 返回值: 由被删除的元素组成的一个数组,如果只删除了一个元素,则返回只包含一个元素的数组.如果没有删除元素,则返回空数组
var arr = [1, 3, 4, 5, 6, 7, 8];
var deleteArr = arr.splice(-4, 3,'a');
console.log(arr);// [1, 3, 4, 'a', 8]
console.log(deleteArr);// [5, 6, 7]
5. sort
// 默认按照Ascii码表进行排列
var arr = [-1, -5 , 8, 0, 2];
arr.sort();
console.log(arr); // [-1, -5, 0, 2, 8]
var arr1 = ['b', 'z', 'h', 'i', 'a'];
arr1.sort();
console.log(arr1); // ['a', 'b', 'h', 'i', 'z']
var arr2 = [27, 49, 5, 7];
arr2.sort();
console.log(arr2);// [27, 49, 5, 7] 比较首位的Ascii码
// 自定义排序:
// 1. 接收俩个参数
// 2. 返回值: 1.负值 => a在前
// 2.正值 => b在前
// 3. 0 => 保持不变
// sort(function(a, b){
//
//})
var arr2 = [27, 49, 5, 7];
arr2.sort(function(a, b){
// if(a > b){
// return 1;
// }else{
// return -1;
// }
return a - b;
});
console.log(arr2);
// 随机排序
var arr = [1, 2, 3, 4, 5, 6];
var arr = [1, 2, 3, 4, 5, 6];
arr.sort(function(){
// Math.random() 返回一个0-1之间的数;
return Math.random() - 0.5;
})
console.log(arr);
// 按年龄排序
var arr = [
{
name: 'Jenny',
age: 18
},
{
name: 'Jone',
age: 10
},
{
name: 'Ben',
age: 16
},
{
name: 'Crytal',
age: 3
},
{
name: 'Lucy',
age: 11
}
];
arr.sort(function(a, b){
return a.age - b.age;
})
以上所有的方法都会修改原数组
3. 作业
// 1. 用splice方法重写数组原型上的unshift方法myUnshift
Array.prototype.myUnshift = function(){
for(var i = 0; i < arguments.length; i++){
this.splice(i, 0, arguments[i]);
}
return this.length;
}
var arr = [1, 2, 3, 4, 5];
arr.myUnshift('l', 'o');
console.log(arr); // ['l', 'o', 1, 2, 3, 4, 5]
// 2. 请按照字节数排序下列数组
// ['我爱你', 'OK', 'Hello', '你说WHAT', '可以']
function getBytes(str){
var bytes = str.length;
for(var i = 0; i < str.length; i++){
if(str.charCodeAt(i) > 255){
bytes++;
}
}
return bytes;
}
var arr = ['我爱你', 'OK', 'Hello', '你说WHAT', '可以'];
arr.sort(function(a, b){
return getBytes(a) - getBytes(b);
})
console.log(arr); // ['OK', '可以', 'Hello', '我爱你', '你说WHAT']