1.创建数组
- 数组文本
var dogs = ['pony', 'jerry']
- new
注意var dogs = new Array('pony','jerry');
2. 访问数组元素
通过索引号访问
3. 添加数组元素
- push
- length属性
4. 关联数组
命名索引的数组
js不支持,只支持数字索引
数组和对象的区别js
数组数字索引,对象命名索引
5. 如何识别数组
typeof 返回的 Object
- isArray()
- instanceof
- 重写isArray()
function isArray(x){ return x.constructor.toString().indexOf("Array")>-1; }
6. 数组方法(☆☆☆☆☆)
1.toString()将数组转换成用逗号分隔的字符串
var fruits = ["Banana", "Orange", "Apple", "Mango"];
console.log(fruits.toString());
-
join()
数组元素结合为一个字符串 -
pop()
删除最后一个元素 -
push()
数组结尾处添加一个新的元素栈:栈顶操作,先进后出
pop()和push()会改变原数组
push() 返回的是数组的长度 -
shift()
删除首个数组元素 其他元素索引相应改变 -
unshift()
在开头添加元素 其他元素索引相应改变shift() 返回的是被移除的元素 unshift() 返回的是数组长度 两者都改变了原数组
-
delete 删除元素
-
splice()
向数据添加新项 | 删除元素 -
concat()
数组拼接 -
slice()
截取数组片段 创建新的数组 不会改变源数组 -
sort()
按字符串顺序进行排序 -
reverse()
反转数组中的元素
var fruits = ["Banana", "Orange", "Apple", "Mango"];
console.log(fruits.toString());
console.log(fruits);
console.log(fruits.join("*"));
console.log(fruits);
console.log(fruits.pop());
console.log(fruits);
console.log(fruits.push('purper'));
console.log(fruits);
console.log('-------shift()和unshift()测试-----');
console.log(fruits.shift());
console.log(fruits);
console.log(fruits.unshift('lemon'));
console.log(fruits);
console.log('-------splice()测试-----');
//返回的是被删除的元素
//会改变原数组
//参数1:应添加新元素的位置
//参数2:删除多少元素
//其余:添加的新元素
console.log(fruits.splice(2, 0, "Lemon", "Kiwi"));
console.log(fruits);
console.log(fruits.splice(0, 1));
console.log(fruits);
console.log('-------concat()测试-----');
var myGirls = ["Cecilie", "Lone"];
var myBoys = ["Emil", "Tobias", "Linus"];
var myChildren = myGirls.concat(myBoys);
console.log(myChildren);
console.log('-------slice()测试-----');
//用数组的某个片段切出新数组
//不会改变原数组 返回的是新数组
var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
//从索引下标为3的元素开始截取(包括3)
var citrus = fruits.slice(3);
console.log(fruits);
console.log(citrus);
//从索引下标为1的元素开始截取 索引为3的元素结束(不包括结束元素)
var citrus = fruits.slice(1, 3);
console.log(citrus);
console.log('-------sort()和reverse()测试-----');
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort(); // 对 fruits 中的元素进行排序
console.log(fruits);
fruits.reverse(); // 反转元素顺序
console.log(fruits);
//sort排序按字符串顺序进行排序 对数字排序会产生不正确的结果
var points = [40, 100, 1, 5, 25, 10];
points.sort();
console.log(points);
//升序
points.sort(function(a, b) {
return a - b;
})
console.log(points);
//以随机顺序排序数组
var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b) { return 0.5 - Math.random() });
console.log(points);
7.在数组内查最大最小值(☆☆☆☆☆)
- 通过在sort()内定义 比较函数 排序之后获得最大最小值(效率低)
- 利用apply()方法
function arrayMax(arr) {
return Math.max.apply(null, arr);
}
var nums = [1, 2, 3, 4, 5];
console.log(arrayMax(nums));
//5
function arrayMin(arr) {
return Math.min.apply(null, arr);
}
console.log(arrayMin(nums));
//1
- 定义方法
function arrayMax(arr) {
var max = -Infinity;
for (var i = 0; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
return max;
}
var nums = [1, 3, 4, 25, 33];
console.log(arrayMax(nums));
//33
function arrayMin(arr) {
var min = Infinity;
for (var i = 0; i < arr.length; i++) {
if (arr[i] < min) {
min = arr[i];
}
}
return min;
}
console.log(arrayMin(nums));
//1
8.排序对象数组
var cars = [
{ type: "Volvo", year: 2016 },
{ type: "Saab", year: 2001 },
{ type: "BMW", year: 2010 }
];
//通过比较函数来对比属性值
cars.sort(function(a, b) {
return a.year - b.year
})
console.log(cars);
//两值相减为负 将a排在b之前
cars.sort(function(a, b) {
var x = a.type.toLowerCase();
var y = b.type.toLowerCase();
if (x < y) { return -1; }
if (x > y) { return 1; }
return 0;
});
console.log(cars);
9.数组迭代(☆☆☆☆☆)
IE9以上 兼容性
-
Array.forEach()
forEach(function(value,index,array){ //value 项目值 //index 项目索引 //array 数组本身 })
-
Array.map()
对每个数组元素执行函数来创建新数组 不会对没有值的数组元素执行函数 不会更改原始数组
-
Array.fliter()
创建一个满足条件的是数组
var nums = [1, 2, 4, 3, 2, 1]; //遍历数组 nums.forEach((item, index, array) => { console.log(item); return item * 2; }) console.log(num); //创建新的数组 每个值*2 //不改变原数组 var num = nums.map((item, index, array) => { return item * 2; }) console.log(num); //打印结果:[ 2, 4, 8, 6, 4, 2 ] var num = nums.filter((item, index, array) => { return item > 2; }) console.log(num); //打印结果:[ 4, 3 ] var num = nums.map((item, index, array) => { return item > 2; }) console.log(num); //打印结果:[ false, false, true, true, false, false ]
-
Array.reduce()
将数组元素计算为一个值(从左到右 -
Array.reduceRight()
将数组元素计算为一个值(从右到左)var nums = [45, 12, 4, 6, 7]; var num = nums.reduce((total, item, index, array) => { console.log('-----'); console.log(total); console.log(item); console.log(index); return total + item; }) console.log('----结果---'); console.log(num);
参数 1. total:总数(初始值/前一次返回的值) 2. item:项目值 3. index:项目索引 4. array:原数组 从索引为1的元素开始计算
-
Array.every()
检查所有数组值是否通过测试
功能类似:Array.filter() 返回值不同var nums = [2, 4, 8, 7, 6]; var num = nums.every((item, index, array) => { return item > 2; //return item > 1; //true }) console.log(num); //打印结果false var num = nums.filter((item, index, array) => { return item > 2; }) console.log(num); //打印结果:[ 4, 8, 7, 6 ]
-
Array.some()
检查某些数组值是否通过了测试 -
Array.indeOf()
在数组中搜索元素值并返回其位置参数: item:必需,检索目标项 start:可选。从哪里开始搜索。负值将从结尾开始的给定位置开始,并搜索到结尾。 返回值: 出现一次目标:返回目标项的数组索引 未出现目标相:返回-1 出现多次目标项:返回第一次出现目标项索引
var fruits = ["Apple", "Orange", "Apple", "Mango"]; var a = fruits.indexOf("Ape"); console.log(a); //a=-1 var b = fruits.indexOf("Apple"); console.log(b); //b=0
-
Array.lastIndexOf()
与 Array.indexOf() 类似,但是从数组结尾开始搜索
参数同上 -
Array.find()
返回通过测试函数的第一个数组元素的值 -
ArrayIndex()
返回通过测试函数的第一个数组元素的索引var nums = [1, 2, 7, 8, 5]; var num = nums.find((item, index, array) => { return item > 2; }) console.log(num); //7 var index = nums.findIndex((item, index, array) => { return item > 2; }) console.log(index); //2
数组基础