JavaScript的数据类型(三): 数组

144 阅读4分钟

前言

数组是一段线性分配的内存,它通过整数去计算偏移去访问其中的元素。数组可以是很快的数据结构。但是JavaScript中没有像这种数组一样的数据结构,而是提供了一种拥有一些类数组(array-like)特性的对象。他把数组的下标转变成了字符串,用其做属性

数组字面量

数组字面量提供了一种非常方便的创建新数组的表达式。一个数组字面量是在一对方括号中包围零个或多个用逗号分隔的值的表达式,数组的第一个值获得属性名'0',第二个值获得属性名'1',依次类推。

var empty=[]
var numbers=[0,1,2,3,4,5,6,7,8,9]
empty[1]    //undefined
numbers[1]  //1

在大多数语言中,一个数组的所有元素都要求的相同的类型,JavaScript允许数组包含任意混合类型的值:

var arr = ['string',9,true,null,undefined,[1,2],{key:value},NaN,Infinity]
arr.length //9

数组的Length

每个数组都有一个length属性。和大多数其他语言不同,JavaScript数组的length是没有上界的。如果你用大于或等于当前length的数字作为下标来保存一个元素,那么length将增大来容纳新元素。不会发生数组边界错误。

length属性的值是这个数组的最大整数属性名+1,它不一定等于数组内属性的个数

var arr =[]
arr.length //0

arr[1000] =true
arr.length  //1001

你可以直接设置length的值。 设置更大的length值无需给数组分配更多的空间。而把length设小将导致所有下标大于等于新length的属性被删除。

numbers.length = 3
//numbers是[0,1,2]

你可以通过把下标指定为一个数组的当前length,可以附加一个新元素到该数组的尾部。

numbers[numbers.length] = 4
//numbers 是[0,1,2,4]

数组的方法

JavaScript提供了许多强大的数组方法,这些方法使得在处理和操作数组时变得更加便捷和高效。以下是数组中常用的方法

1. concat()方法

concat()方法用于连接两个或多个数组,并返回一个新数组。这个方法不会改变现有数组,而是返回一个新的合并数组。

const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];
const newArr = arr1.concat(arr2);

console.log(newArr);  // [1, 2, 3, 4, 5, 6]

2. join()方法

join()方法将数组中的所有元素连接成一个字符串。你可以指定一个分隔符作为参数,用于在连接过程中分隔数组元素。

const arr = ["apple", "banana", "orange"];
const joinedString = arr.join(", ");

console.log(joinedString);  // "apple, banana, orange"

3. push()pop()方法

push()方法用于在数组的末尾添加一个或多个元素,而pop()方法用于从数组末尾移除最后一个元素。

const arr = [1, 2, 3];
arr.push(4, 5);  // 添加元素
console.log(arr);  // [1, 2, 3, 4, 5]

arr.pop();  // 移除最后一个元素
console.log(arr);  // [1, 2, 3, 4]

4. shift()unshift()方法

shift()方法用于移除数组的第一个元素,而unshift()方法用于在数组的开头添加一个或多个元素。

const arr = [1, 2, 3];
arr.shift();  // 移除第一个元素
console.log(arr);  // [2, 3]

arr.unshift(0);  // 在开头添加元素
console.log(arr);  // [0, 2, 3]

5. slice()方法

slice()方法返回一个从开始到结束(不包括结束)选择的数组的一部分。它不会修改原始数组。

const arr = [1, 2, 3, 4, 5];
const slicedArr = arr.slice(1, 4);

console.log(slicedArr);  // [2, 3, 4]

slice()方法可以接受负数作为参数,表示从数组末尾开始计算的位置。

const arr = [1, 2, 3, 4, 5];
const slicedArr = arr.slice(-3);

console.log(slicedArr);  // [3, 4, 5]

6. splice()方法

splice()方法用于在指定位置添加或删除元素。它会修改原始数组,并返回被删除的元素。

const arr = [1, 2, 3, 4, 5];
arr.splice(2, 1, 6);  // 从索引 2 开始删除一个元素,并插入 6
console.log(arr);  // [1, 2, 6, 4, 5]

7. indexOf()lastIndexOf()方法

indexOf()方法返回数组中第一个匹配元素的索引,而lastIndexOf()方法返回数组中最后一个匹配元素的索引。

const arr = [1, 2, 3, 4, 2];
console.log(arr.indexOf(2));  // 1
console.log(arr.lastIndexOf(2));  // 4

8. forEach()方法

forEach()方法遍历数组的每一个元素

const arr = [1, 2, 3];
arr.forEach(item => {
  console.log(item);
});

9. reverse()方法

reverse()方法用于颠倒数组中元素的顺序。

const arr = [1, 2, 3, 4, 5];
const reversedArr = arr.reverse();

console.log(reversedArr);  // [5, 4, 3, 2, 1]

10. sort()方法

sort()方法用于对数组元素进行排序,

const arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5];
const sortArr1 = arr.sort((a, b) =>{
    return a-b //正序
});
const sortArr2 = arr.sort(()=>{
    return b-a //倒叙
})