数组常用方法
方法 | 描述 |
---|---|
toString() | 把数组转换为数组值(逗号分隔)的字符串并返回 |
join() | 使用分隔符,将数组转为字符串并返回 |
concat() | 合并数组,并返回合并之后的数据 |
pop() | 删除最后一位,并返回删除的数据 |
shift() | 删除第一位,并返回删除的数据 |
unshift() | 在第一位新增一或多个数据,返回长度 |
push() | 在最后一位新增一或多个数据,返回长度 |
reserve() | 反转数组,返回结果 |
sort() | 排序(字符规则),返回结果 |
slice() | 截取指定位置的数组,并返回数据 |
splice() | 删除指定位置并替换,返回删除的数据 |
valueOf() | 返回数组对象的原始值 |
indexOf() | 查询并返回数据的索引 |
lastIndexOf() | 反向查询并返回数据的索引 |
toString()
var arr = ["A", "B", "c", "d"];
console.log(arr.toString()); //A,B,c,d
console.log(arr); //(4) ["A", "B", "c", "d"]
toString()
不会改变原数组,返回值以逗号分隔的字符串
join()
var arr = ["A", "B", "c", "d"];
console.log(arr.join()); //A,B,c,d
console.log(arr.join("-")); //A-B-c-d
console.log(arr); //(4) ["A", "B", "c", "d"]
join()
方法不会改变原数组,返回值为一个由参数拼接的字符串;当里面的参数为空时,默认使用逗号分隔,有参数时使用参数分隔。
concat()
var a = [1, 2, 3];
console.log(a); //(3) [1, 2, 3]
console.log(a.concat(4, 5)); //(5) [1, 2, 3, 4, 5]
console.log(a.concat(1, [1, 2, 3], 2)); //(8) [1, 2, 3, 1, 1, 2, 3, 2]
console.log(a.concat([4, 5, 6])); //(6) [1, 2, 3, 4, 5, 6]
console.log(a.concat([4, 5, [1, 2, 3], 6])); //(7) [1, 2, 3, 4, 5, Array(3), 6]
concat()
方法不会该改变原数组,返回值为一个新数组。
需要注意的是a.concat(1,[1,2,3],2)
并不会把[1,2,3]
当成一个数组连接。
pop()
var arr = ["A", "B", "c", "d"];
console.log(arr.pop()); //d
console.log(arr); //(3) ["A", "B", "c"]
pop()
方法会改变原数组,它的返回值为被删除的元素
shift()
var arr = ["A", "B", "c", "d"];
console.log(arr.shift()); //A
console.log(arr); //(3) ["B", "c", "d"]
shift()
方法会改变原数组,返回值为被删除的值
unshift()
var arr = ["A", "B", "c", "d"];
console.log(arr.unshift("e", "f")); //6
console.log(arr); //(6) ["e", "f", "A", "B", "c", "d"]
unshift()
方法会改变原数组,返回值为删除后数组的长度
push()
var arr = ["A", "B", "c", "d"];
console.log(arr.push("e", "f", [1, 2])); //7
console.log(arr);//(7) ["A", "B", "c", "d", "e", "f", Array(2)]
push()
方法会改变原数组,返回值为添加后的数组长度
reserve()
var arr = [1, 2, 3, 4, 5, 6, 7];
console.log(arr.reverse()); //(7) [7, 6, 5, 4, 3, 2, 1]
console.log(arr); //(7) [7, 6, 5, 4, 3, 2, 1]
reverse()
方法会改变原数组,返回值为新数组。
sort()
var arr = [23, 45, 33, 78, 122, 66];
console.log(arr.sort()); //(6) [122, 23, 33, 45, 66, 78]
var arr1 = arr.sort(function(a, b) {
return a - b;
});
console.log(arr1); //(6) [23, 33, 45, 66, 78, 122]
var arr2 = arr.sort(function(a, b) {
return b - a;
});
console.log(arr2); //(6) [122, 23, 33, 45, 66, 78]
sort()
不填写参数,默认以字符串进行比较,可通过使用回调函数进行数值比较
slice()
语法:arrayObject.slice(start,end)
参数 | 描述 |
---|---|
start | 必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推 |
end | 可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素 |
var arr = [1, 2, 3, 4, 5, 6, 7];
console.log(arr.slice(0)); //(7) [1, 2, 3, 4, 5, 6, 7]
console.log(arr.slice(1, 3)); //(2) [2, 3]
console.log(arr.slice(-3, 6)) //(2) [5, 6]
splice()
语法:arrayObject.splice(index,howmany,item1,…,itemX)
参数 | 描述 |
---|---|
index | 必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。 |
howmany | 必需。要删除的项目数量。如果设置为 0,则不会删除项目 |
item1, …, itemX | 可选。向数组添加的新项目 |
var arr = [1, 2, 3, 4, 5, 6, 7];
console.log(arr.splice(1, 3)); //(3) [2, 3, 4] 返回被删除元素组成的数组
console.log(arr); //(4) [1, 5, 6, 7]
console.log(arr.splice(0, 0, "a", "b")); // 添加 [] 未删除元素 所以返回一个空数组
console.log(arr); //(6) ["a", "b", 1, 5, 6, 7]
console.log(arr.splice(2, 4, "a")); //(4) [1, 5, 6, 7] 替换 返回被替换的数组
console.log(arr); //(3) ["a", "b", "a"]
valueOf()
var arr = [1, 2, 3, 4, 5, 6, 7];
console.log(arr.valueOf("B")); //(7) [1, 2, 3, 4, 5, 6, 7]
console.log(arr); //(7) [1, 2, 3, 4, 5, 6, 7]
console.log(arr === arr.valueOf()); //true
valueOf()
返回数组本身
indexOf()
var arr = [1, 2, 3, 4, 5, 6, 7];
console.log(arr.indexOf(4)); //3
console.log(arr.indexOf(8)); //-1
console.log(arr); //(7) [1, 2, 3, 4, 5, 6, 7]
indexOf()
会在数组中查找输入的参数是否存在,如果存在,则返回该元素的索引,遇到第一个符合条件的就返回,如果不存在,则返回-1;
lastIndexOf()
var arr = ["h", "e", "l", "l", "o"];
console.log(arr.lastIndexOf("l")); //3
console.log(arr.lastIndexOf("l", 2)); //2
console.log(arr.lastIndexOf("l", 1)); //-1
console.log(arr.lastIndexOf("l", -2)); //3
console.log(arr.lastIndexOf("l", -4)); //-1
与indexof()
类似,是从后往前查找
常见关于数组的题目
一、改变原数组的方法?(7个)
pop()
push()
shift()
unshift()
reserve()
sort()
splice()
不改变原数组的方法?(5个)
concat()
join()
split()
toString()
slice()
二、 pop()
push()
shift()
unshift()
的作用以及区别?
push()
结尾添加元素 unshift()
开头添加元素 返回添加后的长度
pop()
结尾删除元素 shift()
开头删除元素 返回被删除的值
三、数组去重
function unique1(arr) {
if (!Array.isArray(arr)) {
return "not an array";
}
var result = [];
for (let i = 0; i < arr.length; i++) {
for (var j = 0; j < result.length; j++) {
if (arr[i] == result[j]) {
break;
}
}
if (j == result.length) {
result.push(arr[i]);
}
}
return result;
}
function unique2(arr) {
if (!Array.isArray(arr)) {
return "not an array";
}
var hash = [];
var result = [];
for (var i = 0; i < arr.length; i++) {
if (hash[arr[i]] === undefined) {
result[result.length] = arr[i];
hash[arr[i]] = "1";
}
}
return result;
}
function unique3(arr) {
if (!Array.isArray(arr)) {
return "not an array";
}
var obj = {};
var result = [];
for (var i = 0; i < arr.length; i++) {
if (!obj[arr[i]]) {
result.push(arr[i]);
obj[arr[i]] = "1";
}
}
return result;
}
function unique4(arr) {
if (!Array.isArray(arr)) {
return "not an array";
}
return Array.from(new Set(arr));
}
(数组去重方法还有很多,在此不一一列举)