js数组不是典型数组,本质上新建一个对象,用key和value去模拟的[数组下标就是key,数组存的值就是value]
学习文档:https://www.runoob.com/jsref/jsref-obj-array.html
let arr = [1, 2, 3]
let arr = new Array(1, 2, 3) //新建数组,元素为1,2,3
let arr = new Array(3) //新建数组,长度为3
let arr = '123'.split('')
Array 对象用于在变量中存储多个值:可以是字符串、数字、对象、数组等。不要求数据类型统一。 第一个数组元素的索引值为 0,第二个索引值为 1,以此类推。
length:设置或返回数组元素的个数。
prototype:允许你向数组对象添加属性或方法。用法和Date对象中的该属性一样。
连接两个或更多的数组,并返回结果(一个新数组,原来的数组不变)。
let str1 = ["Kaico", "帅"];
let str2 = ["气", "吗"];
let str3 = str1.concat(str2)
console.log(`输出:` + str3) //输出:输出:Kaico,帅,气,吗
返回数组的可迭代对象。相当于Java中的迭代器。
let str1 = ["Kaico", "帅"];
let str2 = ["气", "吗"];
let str3 = str1.concat(str2)
for (const entry of str3.entries()) {
//entry是一个只有两个元素的数组,第一个元素是下标,第二个元素是被迭代数组的值
console.log(`输出:` + entry)
};
/*输出:
输出:0,Kaico
输出:1,帅
输出:2,气
输出:3,吗
*/
检测数值元素的每个元素是否都符合条件。传入一个参数【返回布尔值的函数】,全部复合条件的话返回true,反之,有一个不符合级返回false。
var ages = [32, 33, 16, 40];
function checkAdult(age) {
return age >= 18;
}
console.log(ages.every(checkAdult)); //输出:false
使用一个固定值来填充数组。
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.fill("apple");
console.log(fruits); //输出:["apple", "apple", "apple", "apple"]
检测数值元素,并返回符合条件所有元素的数组。传入一个参数【返回布尔值的函数】,返回true的话数组元素就返回到新数组中。
var ages = [32, 33, 16, 40];
var newAges = ages.filter(age => {
return age >= 18;
});
console.log(newAges); //输出:[32, 33, 40]
返回符合传入测试(函数)条件的第一个数组元素。传入一个参数【返回布尔值的函数】
var ages = [32, 33, 16, 40];
var newAge = ages.find(age => {
return age >= 18;
});
console.log(newAge); //输出:32
返回符合传入测试(函数)条件的第一个数组元素索引。传入一个参数【返回布尔值的函数】
var ages = [32, 33, 16, 40];
var newAge = ages.findIndex(age => {
return age >= 18;
});
console.log(newAge);//输出:0
数组每个元素都执行一次回调函数。该方法用于调用数组的每个元素,并将元素传递给回调函数。对于空数组是不会执行回调函数的。
/*
age 必需。当前元素
index 可选。当前元素的索引值。
arr 可选。当前元素所属的数组对象。
*/
var ages = [32, 33, 16, 40];
ages.forEach((age, index, arr) => {
console.log('索引:' + index + "age:" + age);
});
/*
输出:
索引:0age:32
索引:1age:33
索引:2age:16
索引:3age:40
*/
判断一个数组是否包含一个指定的值。
let str1 = ["Kaico", "帅"];
console.log(str1.includes("帅")) //输出:true
搜索数组中的元素,并返回它所在的位置(下标)。
let str1 = ["Kaico", "帅"];
console.log(str1.indexOf("帅")) //输出:1
把数组的所有元素放入一个字符串。并可以指定分隔符。
let str1 = ["Kaico", "帅"];
console.log(str1.join("#")) //输出:Kaico#帅
返回数组的可迭代对象,包含原始数组的键(key)。
let str1 = ["Kaico", "帅"];
for (const key of str1.keys()) {
console.log(key)
}
/*
输出:
0
1
*/
搜索数组中的元素,并返回它最后出现的位置。
let str1 = ["Kaico", "帅"];
console.log(str1.lastIndexOf("帅")) //输出:1
通过指定函数处理数组的每个元素,并返回处理后的数组。
用法和forEach()一样,唯一不同的是会返回处理后的数组。map()的参数【函数有返回值】
let str1 = ["Kaico", "帅"];
let str2 = str1.map((str,index,strs)=>{
return str + str;
})
console.log(str2) //输出:["KaicoKaico", "帅帅"]
pop():删除数组的最后一个元素并返回删除的元素。
push():向数组的末尾添加一个或更多元素,并返回新的长度。
let str1 = ["Kaico", "帅"];
let delete1 = str1.pop();//删除最后一个元素并返回该元素
str1.push("气");
console.log(str1) //输出:["Kaico", "气"]
反转数组的元素顺序。
shift():删除并返回数组的第一个元素。
unshift(): 向数组的开头添加一个或更多元素,并返回新的长度。
选取数组的一部分,并返回一个新数组。
var nums = ["1", "2", "3", "4", "5"];
var newNUms = nums.slice(1,3); //截取下标为1 到下标为 3(不包括3) 的元素
console.log(newNUms) //输出:["2", "3"]
用于检测数组中的元素是否满足指定条件(函数提供)。
var ages = [3, 10, 18, 20];
let result = ages.some(age=>{
return age >= 18;
});
console.log(result) //输出:true
数组排序,默认升序。汉字排序不清楚规则。
使用数字排序时,需要指定一个函数作为参数。
var points = [40,100,1,5,25,10];
points.sort(function(a,b){return b-a}); //降序排序
console.log(points) //[100, 40, 25, 10, 5, 1]
points.sort(function(a,b){return a-b});//升序排序
console.log(points) //[1, 5, 10, 25, 40, 100]
字母排序,默认升序,按照26个字母顺序排序。降序的话可以使用数组反转的api。
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();
console.log(fruits) //输出:["Apple", "Banana", "Mango", "Orange"]
fruits.reverse();
console.log(fruits)//输出:["Orange", "Mango", "Banana", "Apple"]
用于添加或删除数组中的元素。这种方法会改变原始数组。
语法:array.splice(index,howmany,item1,…,itemX)
index 必需。规定从何处添加/删除元素。 该参数是开始插入和(或)删除的数组元素的下标,必须是数字。
howmany 可选。规定应该删除多少元素。必须是数字,但可以是 “0”。 如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
item1, …, itemX 可选。要添加到数组的新元素
返回值:如果从 arrayObject 中删除了元素,则返回的是含有被删除的元素的数组。
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.splice(2,1,"Lemon","Kiwi"); //从下标为 2 的元素开始,删除 1 个元素(从下标为 2开始删除包括2),然后下标 2的位置添加"Lemon","Kiwi" 两个元素
console.log(fruits) //输出:["Banana", "Orange", "Lemon", "Kiwi", "Mango"]
fruits.splice(2,2) //删除元素//从下标为 2 的元素开始删除,删除 2 个元素(从下标为 2开始删除包括2)
console.log(fruits) //输出:["Banana", "Orange", "Mango"]
数组的使用总结
从数组中查找符合条件的元素:filter()
多个数组合并:concat()
数组添加元素:push()、unshift()
数组删除元素:shift()、pop()
判断数组中是否含有指定元素:includes()、indexOf()、lastIndexOf()
判断数组中是否含有指定条件的元素:find()、findIndex()、some()
数组遍历:forEach()、keys()、map()、entries()
数组排序:sort()、reverse()
数组指定位置添加/删除元素:splice()