上一章:数据结构与算法的关系和定义
什么是数组?
字面理解:数字的组合
数组是一个 数据的集合,就是将一些数据放在一个盒子里,按照顺序排好,是存储一些数据的集合。
let arr = [1,2,3,4,"hi",true,false]
能保存同种类型的数据,也能保存不同类型的数据。通常保存同种类型的数据。
创建一个数组
通过 new Array() 创建或直接用字面量赋值
方式一:
let arr = new Array(1,2,3);
let arr = new Array();
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
方式二:
let arr = [1,2,3];
访问数组:数组的索引(下标)
[0] 是数组的第一个元素, [1] 是数组的第二个元素
let arr = [1,2,3];
console.log(arr[0], arr[1], arr[2]); // 1, 2, 3
数组的长度 length
let arr = [1,2,3];
console.log(arr.length); // 3
遍历数组:
let arr = [1,2,3];
for(let i=0;i<arr.length;i++){
console.log(i, arr[i])
}
数组的常用方法
let arr = [1,2,3];
arr.push(4); // 向数组的末尾添加一个或更多元素,并返回新的长度。
arr.pop(); // 删除数组的最后一个元素并返回删除的元素。
arr.shift(); // 删除并返回数组的第一个元素。
arr.unshift(10); // 向数组的开头添加一个或更多元素,并返回新的长度。
arr.splice(0,2,1); // 从数组中添加或删除元素。arr.splice(index,howmany,item1,.....,itemX)
- 数组的排序: sort
var points = [40,100,1,5,25,10];
points.sort(function(a,b){return a-b}); // 1,5,10,25,40,100
points.sort(function(a,b){return b-a}); // 100,40,25,10,5,1
let arr = [
{
name:"demo0",
age: 100
},{
name:"demo1",
age: 50
},{
name:"demo2",
age: 30
},{
name:"demo3",
age: 90
},
]
arr.sort((x,y)=> y.age - x.age)
- 数组的合并: concat
let a = [1,2,3];
let b = [4,5,6];
let c = a.concat(b); // [1,2,3,4,5,6]
let d = a.concat(b,7,8,9); // [1,2,3,4,5,6,7,8,9]
every:检测数组所有元素是否都符合指定条件
let ages = [32, 33, 16, 40];
const isAdult = ages.every(age => {
return age >= 18;
})
console.log(isAdult); // false
some:检测数组中的元素是否满足指定条件,有一个元素满足条件就返回 true
let ages = [3, 10, 18, 20];
const hasAdult = ages.every(age => {
return age >= 18;
})
console.log(hasAdult); // true
filter:检测数值元素,并返回符合条件所有元素的数组
let ages = [32, 33, 16, 40];
const adults = ages.filter(age => {
return age >= 18;
})
console.log(adults); // [32,33,40]
map:通过指定函数处理数组的每个元素,并返回处理后的数组
array.map(function(currentValue,index,arr), thisValue)
let numbers = [4, 9, 16, 25];
const addNumbers = numbers.map(number => {
return number+1;
})
console.log(addNumbers); // [5, 10, 17, 26]
console.log(numbers.map(Math.sqrt)); // 2,3,4,5
foreach:数组每个元素都执行一次回调函数。
array.forEach(callbackFn(currentValue, index, arr), thisValue)
let arr = [4, 9, 16, 25];
arr.forEach((item,index)=>{
console.log(item,index);
})
reduce:将数组元素计算为一个值(从左到右)。通常可以用来累加、累乘、深度属性.的访问
let arr = [10,11,12,13];
let res = arr.reduce((item1, item2)=> item1+item2);
console.log(res); // 46
- 数组的迭代器接口
Symbol.iterator 迭代器接口
let arr = [1,2,3]
let item = arr[Symbol.iterator]()
console.log(item); // 获取到迭代器对象
console.log(item.next());
console.log(item.next());
console.log(item.next());
console.log(item.next());
只要符合迭代器的接口,就可以使用 for of 循环,对迭代器对象进行遍历。
let arr = [1,2,3];
for(let i of arr){
console.log(i)
}
entries:返回数组的可迭代对象,遍历键值对。
for(let [key, value] of ['a', 'b'].entries()){
console.log(key, value);
}
// 0 "a"
// 1 "b"
// 不使用 for... of 循环
let entries = ['a', 'b'].entries();
console.log(entries.next().value); // [0, "a"]
console.log(entries.next().value); // [1, "b"]
// 数组含空位
console.log([...[,'a'].entries()]); // [[0, undefined], [1, "a"]]
let arr = [1,2,3];
for(let i of arr.entries()){
console.log(i);
}
keys:遍历键名。
let arr = [1,2,3];
for(let i of arr.keys()){
console.log(i);
}
values:遍历键值。
let arr = [1,2,3];
for(let i of arr.values()){
console.log(i);
}
- Array.from:通过给定的对象中创建一个数组。也就是将类似于数组的结构转变为真的数组结构。
Array.from(object, mapFunction, thisValue)
function test(){
console.log(Array.from(arguments))
}
test(1,2,3)
let arr = [10,11,12,13];
console.log(arr.indexOf(10)); // 包含 返回对应索引 0
console.log(arr.indexOf(15)); // 不包含 -1 ,包含 索引
console.log(arr.inclues(15)); // 不包含 false ,包含 true
let res = arr.find(item=>item>10); // 返回符合传入测试(函数)条件的数组元素。(返回第一个满足的) 11
let res = arr.findIndex(item=>item>10); // 找索引值 1
let res = arr.findLast(item=>item>10); // 从后面开始查找 13
let res = arr.findLastIndex(item=>item>10); // 从后找索引值 3
console.log(res)
- 二维数组
let arr = [
[98,99,100],
[100,20,100],
[80,99,80],
]
for(let i=0;i<arr.length;i++){
console.log(`第${i+1}个人的成绩`)
for(let j=0;j<arr[i].length;j++){
console.log(arr[i][j])
}
}