数组相关API
数组相关API
改变原数组
数组尾部添加一个或多个元素,返回长度。会改变原数组。
let arr1 = [1,2,3];
let arr2 = [4,5];
let length1 = arr1.push(4);
let length2 = arr2.push(4, 5);
console.log(arr1); // [1, 2, 3 ,4]
console.log(arr2); // [4, 5, 4, 5]
console.log(length1); // 4
console.log(length2); // 4
数组尾部删除一个元素,返回删除的元素。会改变原数组。
let arr = [1,2,3,4];
console.log(arr.pop()); //4
console.log(arr); //[1,2,3]
数组头部添加一个或多个元素,返回长度。会改变原数组。
let arr1 = [1,2,3,4];
let arr2 = [1,2,3,4];
console.log(arr1.unshift(1)); // 5
console.log(arr2.unshift(1,7,8)); // 7
console.log(arr1); // [1, 1, 2, 3, 4]
console.log(arr2); // [1, 7, 8, 1, 2, 3, 4]
数组头部删除一个或多个元素,返回删除的元素。会改变原数组。
let arr1 = [1,2,3,4];
console.log(arr1.shift()); // 1
console.log(arr1); // [ 2, 3, 4]
一般用来删除特定参数,返回删除的元素组成的数组,会改变原数组。可选的参数:
- 参数一:删除元素开始的索引
- 参数二:要删除的个数
- 参数二后面的参数:替换删除的元素的 一个或多个元素
let arr1 = [1,2,3,4,5,6,7,8,9,10];
console.log(arr1.splice(0,2)); // [1, 2]
console.log(arr1); // [3, 4, 5, 6, 7, 8, 9, 10]
console.log(arr1.splice(1,0,23,4)); // []
console.log(arr1); // [3, 23, 4, 4, 5, 6, 7, 8, 9, 10]
console.log(arr1.splice(4,2,666)); // [5, 6]
console.log(arr1); // [3, 23, 4, 4, 666, 7, 8, 9, 10]
按照Unicode code
位置排序,默认升序,返回排序后的数组。会改变数组。
let arr1 = [234,52,23,251,1516,241,23,84];
let arr2=[{age:222},{age:3232},{age:23},{age:21}]
console.log(arr1.sort()); // [1516, 23, 23, 234, 241, 251, 52, 84]
console.log(arr1); // [1516, 23, 23, 234, 241, 251, 52, 84]
console.log(arr1.sort((a,b)=>a-b)); // [23, 23, 52, 84, 234, 241, 251, 1516]
console.log(arr1.sort((a,b)=>b-a)); // [1516, 251, 241, 234, 84, 52, 23, 23]
console.log(arr2.sort((a,b)=>a.age-b.age)); // [{ "age": 21},{"age": 23},{"age": 222},{ "age": 3232}]
console.log(arr2.sort((a,b)=>b.age-a.age)); // [{ "age": 3232},{"age": 222},{"age": 23},{ "age": 21}]
翻转数组,返回翻转后的数组。会改变数组。
let arr1 = [1,2,3,4,5];
console.log(arr1.reverse()); // [5, 4, 3, 2, 1]
console.log(arr1); // [5, 4, 3, 2, 1]
用新元素替换掉数组内的元素,可以指定替换下标范围(含头不含尾),返回替换后的数组,会改变原数组。
arr.fill(value, start, end)
let arr=[1, 2, 3];
arr.fill(555); // [555, 555, 555]
[1, 2, 3].fill(4, 1); // [1, 4, 4]
[1, 2, 3].fill(4, 1, 2); // [1, 4, 3]
[1, 2, 3].fill(4, 1, 1); // [1, 2, 3]
[1, 2, 3].fill(4, 3, 3); // [1, 2, 3]
[1, 2, 3].fill(4, -3, -2); // [4, 2, 3]
console.log(arr); // [555, 555, 555]
方法浅复制数组的一部分到同一数组中的另一个位置,并返回它,不会改变原数组的长度。返回新数组,会改变原数组。
arr.copyWithin(target, start, end)
const arr = [1, 2, 3, 4, 5]
const arr1 = [1, 2, 3, 4, 5]
const arr2 = [1, 2, 3, 4, 5]
//从下标为3的元素开始复制数组,所以4, 5被替换成1, 2
console.log(arr.copyWithin(3)) // [1,2,3,1,2]
// 从下标为3的元素开始,复制数组,指定复制的第一个元素下标为1,所以4, 5被替换成2, 3
console.log(arr1.copyWithin(3, 1)) // [1,2,3,2,3]
// 从下标为3的元素开始,复制数组,指定复制的第一个元素下标为1,结束位置为2,所以4被替换成2
console.log(arr2.copyWithin(3, 1, 2)) // [1,2,3,2,5]
// 改变原数组
console.log(arr2) // [1,2,3,2,5]
不改变原数组
用于连接两个或多个数组,返回被连接数组的。不改变原数组。
let arr1 = [1,2,3];
let arr2 = [4,5];
let arr3 = arr1.concat(arr2);
let arr4 = arr1.concat(arr2, arr3)
console.log(arr1); // [1, 2, 3]
console.log(arr2); // [4,5]
console.log(arr3); // [1, 2, 3, 4, 5]
console.log(arr4); // [1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
将数组的元素按照自定义的符号拼接成字符串,默认为‘,’。不改变原数组。
let arr1 = [1,2,3];
let str2 = arr1.join();
let str3 = arr1.join('***');
console.log(arr1); // [1, 2, 3]
console.log(str2); // '1,2,3'
console.log(str3); // '1***2***3'
返回某个数组的 索引 start
到end
的元素(含头不含尾)组成的新数组。不会改变原数组。
let arr1 = [1,2,3,4,6,7,8,9,23];
console.log(arr1.slice(0,2)); // [1, 2]
console.log(arr1.slice(4,8)); // [6, 7, 8, 9]
console.log(arr1.slice(6)); // [8, 9, 23]--只有一个参数
console.log(arr1); // [1, 2, 3, 4, 6, 7, 8, 9, 23]
从前面开始查找某个元素的位置,返回被查找元素的索引,不改变原数组。可选参数:
- 参数一:要查找的元素
- 参数二:开始查找的索引,如果是负数,-1 表示从最后一个元素开始查找,-2 表示从倒数第二个元素开始查找,以此类推。
- 找不到元素返回-1
let arr1 = [1,2,3,4,5];
console.log(arr1.indexOf(2)); // 1
console.log(arr1.indexOf(2,3)); // -1
console.log(arr1.indexOf(2,-3)); // -1
console.log(arr1.indexOf(2,-5)); // 1
console.log(arr1); // [1,2,3,4,5]
从后面开始查找某个元素的位置,返回被查找元素的索引,不改变原数组。可选参数:
- 参数一:要查找的元素
- 参数二:开始查找的索引,如果是负数,-1 表示从最后一个元素开始查找,-2 表示从倒数第二个元素开始查找,以此类推。
- 找不到元素返回-1
let arr1 = [1,2,3,4,5];
console.log(arr1.lastIndexOf(2)); // 1
console.log(arr1.lastIndexOf(2,3)); // 1
console.log(arr1.lastIndexOf(2,8)); // 1--这个查找的索引过大,相当于没写
console.log(arr1.lastIndexOf(2,-3)); // 1
console.log(arr1.lastIndexOf(2,-5)); // -1
console.log(arr1); // [1,2,3,4,5]
判断数组是否包含某个元素,返回布尔值,不会改变原数组。
let arr1 = [1,2,3,4,5];
console.log(arr1.includes(2)); // true
console.log(arr1.includes(2,3)); // false
console.log(arr1.includes(2,-3)); // false
console.log(arr1.includes(2,-5)); // true
console.log(arr1); // [1,2,3,4,5]
将类似数组的对象(array-like object)和可遍历(iterable)的对象转为真正的数组。
let arr=[1,2,3]
console.log(Array.from('foo'));// ["f", "o", "o"]
console.log(Array.from(arr, x => x + x)); // [2, 4, 6]
// 不改变原数组
console.log(arr) // [1,2,3]
用于将一组值,转换为数组。这个方法的主要目的,是弥补数组构造函数 Array() 的不足。因为参数个数的不同,会导致 Array() 的行为有差异。
Array.of(7); // [7]
Array.of(1, 2, 3); // [1, 2, 3]
Array(7); // [ , , , , , , ]
Array(1, 2, 3); // [1, 2, 3]
返回迭代器:返回键值对
//数组
const arr = ['a', 'b', 'c'];
for(let v of arr.entries()) {
console.log(v)
}
// [0, 'a'] [1, 'b'] [2, 'c']
//Set
const arr = new Set(['a', 'b', 'c']);
for(let v of arr.entries()) {
console.log(v)
}
// ['a', 'a'] ['b', 'b'] ['c', 'c']
//Map
const arr = new Map();
arr.set('a', 'a');
arr.set('b', 'b');
for(let v of arr.entries()) {
console.log(v)
}
// ['a', 'a'] ['b', 'b']
返回迭代器:返回键值对的value
//数组
const arr = ['a', 'b', 'c'];
for(let v of arr.values()) {
console.log(v)
}
//'a' 'b' 'c'
//Set
const arr = new Set(['a', 'b', 'c']);
for(let v of arr.values()) {
console.log(v)
}
// 'a' 'b' 'c'
//Map
const arr = new Map();
arr.set('a', 'a');
arr.set('b', 'b');
for(let v of arr.values()) {
console.log(v)
}
// 'a' 'b'
返回迭代器:返回键值对的key
//数组
const arr = ['a', 'b', 'c'];
for(let v of arr.keys()) {
console.log(v)
}
// 0 1 2
//Set
const arr = new Set(['a', 'b', 'c']);
for(let v of arr.keys()) {
console.log(v)
}
// 'a' 'b' 'c'
//Map
const arr = new Map();
arr.set('a', 'a');
arr.set('b', 'b');
for(let v of arr.keys()) {
console.log(v)
}
// 'a' 'b'
循环遍历,返回undefined
,函数内没有return
。不改变原数组。
let arr1=["元素1","元素2","元素3","元素4"]
/**
* item 数组的元素
* index 元素对应的索引
* arr 当前遍历的数组
*/
let arr2=arr1.forEach((item,index,arr)=>{
console.log(item+'---'+index+arr)
})
console.log(arr1);// ['元素1', '元素2', '元素3', '元素4']
console.log(arr2);// undefined
给数组每项运行给定函数,返回运行后的新数组。不改变原数组。
let arr1=["元素1","元素2","元素3","元素4"]
/**
* item 数组的元素
* index 元素对应的索引
* arr 当前遍历的数组
*/
let arr2=arr1.map((item,index,arr)=>{
return item+11111
})
console.log(arr1);// ['元素1', '元素2', '元素3', '元素4']
console.log(arr2);// ['元素111111', '元素211111', '元素311111', '元素411111']
给数组每项进行运算,每项都符合返回true,否则false。不改变原数组。
let arr1=["元素11","元素222","元素32","元素4"]
/**
* item 数组的元素
* index 元素对应的索引
* arr 当前遍历的数组
*/
let arr2=arr1.every((item,index,arr)=>{
return item.length>3
})
console.log(arr1);// ["元素11","元素222","元素32","元素4"]
console.log(arr2);// false
有一项符合运算就返回true,否则false,后面的项不在参与运算。不改变原数组。
let arr1=["元素11","元素222","元素32","元素4"]
/**
* item 数组的元素
* index 元素对应的索引
* arr 当前遍历的数组
*/
let arr2=arr1.some((item,index,arr)=>{
console.log("测试打印次数,表示后续项不在参与运算")
return item.length>3
})
console.log(arr1);// ["元素11","元素222","元素32","元素4"]
console.log(arr2);// true
返回符合运算的元素组成的数组。不改变原数组。
let arr1=["元素11","元素222","元素32","元素4"]
/**
* item 数组的元素
* index 元素对应的索引
* arr 当前遍历的数组
*/
let arr2=arr1.filter((item,index,arr)=>{
return item.length>3
})
console.log(arr1);// ["元素11","元素222","元素32","元素4"]
console.log(arr2);// ['元素11', '元素222', '元素32']
返回符合运算的第一个元素,后面的项不在参与运算。不改变原数组。
let arr1=["元素11","元素222","元素32","元素4"]
/**
* item 数组的元素
* index 元素对应的索引
* arr 当前遍历的数组
*/
let arr2=arr1.find((item,index,arr)=>{
console.log("测试打印次数,表示后续项不在参与运算")
return item.length>3
})
console.log(arr1);// ["元素11","元素222","元素32","元素4"]
console.log(arr2);// "元素11"
返回符合运算的第一个元素的索引,后面的项不在参与运算。不改变原数组。
let arr1=["元素11","元素222","元素32","元素4"]
/**
* item 数组的元素
* index 元素对应的索引
* arr 当前遍历的数组
*/
let arr2=arr1.findIndex((item,index,arr)=>{
console.log("测试打印次数,表示后续项不在参与运算")
return item.length>3
})
console.log(arr1);// ["元素11","元素222","元素32","元素4"]
console.log(arr2);// 0
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)