数组
创建数组
创建数组第一种数组文本方法比较好,new 会影响执行效率
var arr = ["arr1", "arr2", "arr3"];
console.log(arr);// ["arr1", "arr2", "arr3"]
var arr = new Array("arr1", "arr2", "arr3");
console.log(arr);// ["arr1", "arr2", "arr3"]
访问数组
var arr = ["arr1", "arr2", "arr3"];
//访问数组的第一项
console.log(arr[0]);// arr1
//访问数组的最后一项
console.log(arr[arr.length - 1]);// arr3
修改数组
var arr = ["arr1", "arr2", "arr3"];
arr[0] = 'arr0';
console.log(arr); // ["arr0", "arr2", "arr3"]
遍历数组
使用 for 最安全
var arr = ["arr1", "arr2", "arr3"];
for(var i = 0; i < arr.length; i++){
console.log(arr[i]);
}
arr.forEach(function(value){
console.log(value);
})
判断是否是数组
- 使用 isArray() , 不过老版浏览器不支持
var arr = ["arr1", "arr2", "arr3"];
console.log(Array.isArray(arr));// true
- 自己创建 isArray() 函数
var arr = ["arr1", "arr2", "arr3"];
function isArray(x) {
return x.constructor.toString().indexOf("Array") > -1;
}
console.log(isArray(arr));// true
- 使用 instanceof
var arr = ["arr1", "arr2", "arr3"];
console.log(arr instanceof Array);// true
数组方法
数组转换成字符串
join() : 传入指定的分隔符
var arr = ["arr1", "arr2", "arr3"];
console.log(arr.toString());// arr1,arr2,arr3
console.log(arr.join("*"));// arr1*arr2*arr3
删除最后一个元素
pop() : 返回被删除的元素
var arr = ["arr1", "arr2", "arr3"];
console.log(arr.pop());// arr3
console.log(arr);// ["arr1", "arr2"]
在最后添加一个元素
push() : 返回添加后数组的长度
var arr = ["arr1", "arr2", "arr3"];
console.log(arr.push("arr4"));// 4
console.log(arr);// ["arr1", "arr2", "arr3", "arr4"]
删除第一个元素
shift() : 返回被删除的元素
var arr = ["arr1", "arr2", "arr3"];
console.log(arr.shift());// arr1
console.log(arr);// ["arr2", "arr3"]
在开头添加元素
unshift() : 返回添加后数组的长度
var arr = ["arr1", "arr2", "arr3"];
console.log(arr.unshift("arr0"));// 4
console.log(arr);// ["arr0", "arr1", "arr2", "arr3"]
删除元素
delete : 删除元素只是把值替换成 undefined , 会留下一个空洞
var arr = ["arr1", "arr2", "arr3"];
console.log(delete arr[0]);// true
console.log(arr);// [empty, "arr2", "arr3"]
删除添加数组
splice() : 返回删除的元素
参数一:定义添加元素的位置
参数二:从参数一位置开始,删除多少个元素
其他参数:添加的元素
var arr = ["arr1", "arr2", "arr3"];
console.log(arr.splice(1));// ["arr2", "arr3"]
console.log(arr);// ["arr1"]
var arr = ["arr1", "arr2", "arr3"];
console.log(arr.splice(1, 1));// ["arr2"]
console.log(arr);// ["arr1", "arr3"]
var arr = ["arr1", "arr2", "arr3"];
console.log(arr.splice(1, 1, "arr2.1", "arr2.2"));// ["arr2"]
console.log(arr);// ["arr1", "arr2.1", "arr2.2", "arr3"]
合并数组
concat() : 返回一个新的数组 , 不会改变原来的数组
var arr1 = ["arr1", "arr2"];
var arr2 = ["arr3", "arr3"];
console.log(arr1.concat(arr2));// ["arr1", "arr2", "arr3", "arr3"]
console.log(arr1);// ["arr1", "arr2"]
数组剪切
slice() : 返回一个新的数组,不会改变原来的数组
参数一: 定义索引开始的位置
参数二: 定义索引结束的位置
剪切参数二 - 参数一 个元素 [参数一,参数二)
var arr = ["arr1", "arr2", "arr3","arr4"];
console.log(arr.slice(1));// ["arr2", "arr3"]
console.log(arr);// ["arr1", "arr2", "arr3"]
console.log(arr.slice(1, 3));// ["arr2", "arr3"]
console.log(arr.slice(1, 1));// []
数组排序
sort()
var arr = ["b", "d", "a", "c"];
console.log(arr.sort());// ["a", "b", "c", "d"]
// 因为排序是根据 Unicode 进行排序的所以,数字排序会又问题
var arr = ["20", "1001", "100", "23"];
console.log(arr.sort());// ["100", "1001", "20", "23"]
arr.sort(function(a, b){
return a - b
});
console.log(arr);// ["20", "23", "100", "1001"]
arr.sort(function(a, b){
return b - a
});
console.log(arr);// ["1001", "100", "23", "20"]
反转数组
reverse()
var arr = ["arr1", "arr2", "arr3"];
console.log(arr.reverse());// ["arr3", "arr2", "arr1"]
查找元素
indexOf()
lastIndexOf()
var arr = ["arr1", "arr2", "arr3", "arr1"];
console.log(arr.indexOf("arr1")); //0
console.log(arr.lastIndexOf("arr1"));// 3
数组迭代
- forEach() : 为每个数组元素调用一次函数
- 参数一:元素值
- 参数二:索引
- 参数三:数组本身
var arr = [1, 2, 3];
var num = 0
arr.forEach(function(value, index, arr){
num = num + value;
});
console.log(num);// 6
- map() : 通过对每个数组元素执行函数来创建新数组 , 不会改变原始数组
- 参数一:元素值
- 参数二:索引
- 参数三:数组本身
var arr = [1, 2, 3];
var newArr = arr.map(function(value, index, arr){
return value * 2;
});
console.log(newArr);// [2, 4, 6]
- filter() : 过滤
var arr = [1, 2, 3];
var newArr = arr.filter(function(value, index, arr){
return value > 2;
})
console.log(newArr);// [3]
- reduce() :
- 参数一:回调函数
- 参数二:设置 taotal 的初始值
var arr = [1, 2, 3];
var newArr = arr.reduce(function(total, value, index, arr){
return total + value;
});
console.log(newArr); // 6
var newArr = arr.reduce(function(total, value, index, arr){
return total + value;
}, 10);
console.log(newArr);// 16
- every()
//当数组的元素都大于 2 的时候返回 true
var arr = [1, 2, 3];
var bool = arr.every(function(value){
return value > 2;
})
console.log(bool);// false
- some()
//数组其中一项大于 2 就返回 true
var arr = [1, 2, 3];
var bool = arr.some(function(value){
return value > 2;
})
console.log(bool);// true
- find()
//返回大于 1 的第一个元素的值
var arr = [1, 2, 3];
var newArr = arr.find(function(value, index, arr){
return value > 1;
})
console.log(newArr);// 2
//返回大于 1 的第一个元素的索引
var newArr = arr.findIndex(function(value, index, arr){
return value > 1;
})
console.log(newArr);// 1