----------
▉ 数组有哪些基本操作?
数组可以理解成是Excel中的列,基本上在列方向上的操作,都可以联想到JS数组的操作。
以下是一些常见的操作:
▶ 一、添加元素
`push()`:在数组末尾添加一个或多个元素,并返回新的数组长度。
```javascript
function test_add_item(){
const arr = [1, 2, 3];
arr.push(4);
console.log(JSON.stringify(arr));
}
```
`unshift()`:在数组开头添加一个或多个元素,并返回新的数组长度。
```javascript
function test_unshift(){
const arr = [1, 2, 3];
arr.unshift(0);
console.log(JSON.stringify(arr)); // [0, 1, 2, 3]
}
```
▶ 二、删除元素
`pop()`:删除数组的最后一个元素,并返回被删除的元素。
```javascript
function test_pop(){
const arr = [1, 2, 3];
const removedElement = arr.pop();
console.log(JSON.stringify(arr)); // [1, 2]
console.log(removedElement); // 3
}
```
`shift()`:删除数组的第一个元素,并返回被删除的元素。
```javascript
function test_shift(){
const arr = [1, 2, 3];
const removedElement = arr.shift();
console.log(JSON.stringify(arr)); // [2, 3]
console.log(removedElement); // 1
}
```
▶ 三、查找元素
`indexOf()`:返回指定元素在数组中的第一个位置,如果不存在则返回 -1。
```javascript
function test_indexof(){
const arr = [1, 2, 3, 2];
console.log(arr.indexOf(2)); // 1
}
```
`lastIndexOf()`:返回指定元素,在数组中的最后一个位置,如果不存在则返回 -1。
```javascript
function test_lastIndexOf(){
const arr = [1, 2, 3, 2];
console.log(arr.lastIndexOf(2)); // 3
}
```
`includes()`:判断数组是否包含指定元素,返回true或false。
```javascript
function test_includes(){
const arr = [1, 2, 3];
console.log(arr.includes(2)); // true
}
```
▶ 四、数组遍历
前面已经讲过了,关注拉小登Excel,参考前面的教程
▶ 五、数组拼接和切片
`concat()`:连接两个或多个数组,返回一个新数组。
```javascript
function test_concat(){
const arr1 = [1, 2];
const arr2 = [3, 4];
const combinedArray = arr1.concat(arr2);
console.log(JSON.stringify(combinedArray)); // [1, 2, 3, 4]
}
```
`slice()`:从数组中提取一部分,返回一个新数组。下面的代码,把第2~第5个元素提取出来,生成了一个新的数组。
```javascript
function test_slice(){
let arr = [1, 2, 3, 4, 5];
let slicedArray = arr.slice(1, 4);
console.log(JSON.stringify(slicedArray)); // [2, 3, 4]
}
```
slice函数的用法如下:
```
array.slice(start, end)
```
- `start`:可选参数,表示提取开始的位置索引,默认为 0。如果是负数,则表示从数组末尾开始计数。
- `end`:可选参数,表示提取结束的位置索引(不包括该位置的元素),默认为数组的长度。如果是负数,则表示从数组末尾开始计数。
▶ 六、行列拼接
在Excel总还有vstack和HSTACK两个函数,分别用来讲多列、多行拼接成一个表格。
JSA中没有类似的函数,所以我就自己写了一个。
vstack函数。把多行数据按列方向,向下拼接。
```
function test_vstack(){
const arr1 = [1, 2];
const arr2 = [3, 4];
const combinedArray = [arr1,arr2];
Range("A1:B2").Value2= combinedArray;
console.log(JSON.stringify(combinedArray));
}
```
计算结果是:[[1,2],[3,4]]
赋值到表格中,效果如下:
hstack函数。把多列数据按行方向,向右拼接。
```
function test_hstack(){
const arr1 = [1, 2];
const arr2 = [3, 4];
const combinedArray = [arr1,arr2];
Range("A1:B2").Value2= transpose(combinedArray);
console.log(JSON.stringify(combinedArray));
}
function transpose(arr){
const transposed = [];
for (let i = 0; i < arr[0].length; i++) {
transposed[i] = [];
for (let j = 0; j < arr.length; j++) {
transposed[i][j] = arr[j][i];
}
}
return transposed;
}
```
把数据赋值到表格中,效果如下:
▶ 六、数组排序和反转
`sort()`:对数组进行排序,默认按照字典序排序。可以传入比较函数来自定义排序规则。
```javascript
function test_sort(){
const arr = [3, 1, 2];
arr.sort();
console.log(JSON.stringify(arr)); // [1, 2, 3]
}
```
`reverse()`:反转数组的顺序。
```javascript
function test_reverse(){
const arr = [1, 2, 3];
arr.reverse();
console.log(JSON.stringify(arr)); // [3, 2, 1]
}
```
▶ 七、其他操作
`map()`:对数组中的每个元素应用一个函数,返回一个新数组。
下面的代码,对数组中的每个数组乘以了2。
```javascript
function test_map(){
const arr = [1, 2, 3];
const mappedArray = arr.map(item => item * 2);
console.log(JSON.stringify(mappedArray)); // [2, 4, 6]
}
```
`filter()`:过滤数组中的元素,返回一个新数组,其中包含通过测试函数的元素。
下面的代码,用来筛选出数组中所有的偶数。
```javascript
function test_filter(){
const arr = [1, 2, 3, 4];
const filteredArray = arr.filter(item => item % 2 === 0);
console.log(JSON.stringify(filteredArray)); // [2, 4]
}
```
`reduce()`:对数组中的元素进行累积操作,返回一个单一的值。用法和Excel中的reduce函数类似。
```javascript
function test_reduce(){
const arr = [1, 2, 3];
const sum = arr.reduce((accumulator, currentValue) => accumulator + currentValue, 0);
console.log(sum); // 6
}
```
▶ 清空数组
将数组的长度length设置为0,即可以清空数组中的所有内容,得到一个空白的数组。
```
function test_清空(){
let arr = [1, 2, 3];
arr.length = 0;
console.log(JSON.stringify(arr)); // []
}
```