JS-06-数组

本文详细介绍了JavaScript中数组的创建、访问、长度调整、索引操作、数组搜索、切片、添加/删除元素、排序、连接以及多维数组的处理。重点讲解了如何使用indexOf、slice、push、pop、unshift、shift等方法,并强调了注意事项。
摘要由CSDN通过智能技术生成

一、数组的创建与访问

见:JS-04-javaScript数据类型和变量

JavaScript的Array,索引下标从0开始。

JavaScript的Array可以包含任意数据类型,并通过索引来访问每个元素。

let arr = ['A', 'B', 'C'];
console.log(arr[1]); // A

 

1-1、数组的创建

1、使用数组字面量(最常用、最直接)

let fruits = ["Banana", "Orange", "Apple", "Mango"];  
console.log(fruits); // 输出: ["Banana", "Orange", "Apple", "Mango"]

将数组元素放在方括号[]中,元素之间用逗号,分隔。 

2、使用new Array构造函数

使用new关键字和Array构造函数来创建一个新数组。

示例1:创建一个空数组

let emptyArray = new Array();  
console.log(emptyArray); // 输出: []

示例2:创建一个具有指定长度的数组(初始时所有元素都是undefined 

let numbers = new Array(5); // 创建一个长度为5的数组  
console.log(numbers); // 输出: [undefined, undefined, undefined, undefined, undefined]

示例3:使用参数列表创建数组

let colors = new Array("Red", "Green", "Blue");  
console.log(colors); // 输出: ["Red", "Green", "Blue"]

 

3、使用Array.of()方法(ES6+)

Array.of()方法创建一个具有可变数量参数的新数组实例,而不考虑参数的数量或类型。这与使用数组字面量语法相似,但当你想要创建一个包含单个数字(比如01)的数组时特别有用,因为直接使用new Array(number)会根据提供的数字创建一个具有指定长度的数组(而不是包含该数字的数组)。

let singleZero = Array.of(0); // 创建一个包含单个元素0的数组  
console.log(singleZero); // 输出: [0]  
  
let singleString = Array.of('a'); // 创建一个包含单个字符串'a'的数组  
console.log(singleString); // 输出: ["a"]

4、使用Array.from()方法(ES6+)

Array.from()方法从一个类似数组或可迭代对象中创建一个新的、浅拷贝的数组实例。

let arrayLike = { '0': 'a', '1': 'b', '2': 'c', length: 3 };  
// ES6之前,将类似数组的对象转换为真正的数组很繁琐  
// ES6以后,可以使用Array.from()  
let realArray = Array.from(arrayLike);  
console.log(realArray); // 输出: ["a", "b", "c"]

 

要取得Array的长度,直接访问length属性:

let arr = [1, 2, 3.14, 'Hello', null, true];
console.log(arr.length); // 6

1-2、数组的访问

let fruits = ["Banana", "Orange", "Apple", "Mango"];  
  
// 访问第一个元素  
console.log(fruits[0]); // 输出: Banana  
  
// 访问第三个元素(注意索引是从0开始的)  
console.log(fruits[2]); // 输出: Apple  
  
// 尝试访问一个不存在的索引(比如5)会返回undefined  
console.log(fruits[5]); // 输出: undefined

 

 1-3、数组的修改

Array可以通过索引把对应的元素修改为新的值,因此,对Array的索引进行赋值会直接修改这个Array!!!

let arr = ['A', 'B', 'C'];
arr[1] = 99;
console.log(arr); // arr现在变为['A', 99, 'C']
console.log(arr[1]); // 99

1-4、数组的遍历

遍历数组以访问其所有元素是常见的需求。这可以通过循环来实现,比如for循环、for...of循环(ES6+)或Array.prototype.forEach()方法。

1、使用for循环

let fruits = ["Banana", "Orange", "Apple", "Mango"];  
  
for (let i = 0; i < fruits.length; i++) {  
  console.log(fruits[i]);  
}  
// 输出:  
// Banana  
// Orange  
// Apple  
// Mango

2、使用for...of循环(ES6+)

let fruits = ["Banana", "Orange", "Apple", "Mango"];  
  
for (let fruit of fruits) {  
  console.log(fruit);  
}  
// 输出:  
// Banana  
// Orange  
// Apple  
// Mango

 4、使用forEach()方法

let fruits = ["Banana", "Orange", "Apple", "Mango"];  
  
fruits.forEach(function(fruit) {  
  console.log(fruit);  
});  
  
// 或者使用箭头函数(ES6+)  
fruits.forEach(fruit => console.log(fruit));  
  
// 输出:  
// Banana  
// Orange  
// Apple  
// Mango

二、改变数组的长度

1、直接给Array的length赋一个新的值

直接给Array的length赋一个新的值会导致Array大小的变化:

let arr = ['A', 'B', 'C'];
console.log(arr.length); // 3

// 调整数组大小:
arr.length = 6;
console.log(arr); // arr变为['A', 'B', 'C', undefined, undefined, undefined]

// 调整数组大小:
arr.length = 2;
console.log(arr); // arr变为['A', 'B']

不建议直接修改数组的大小! 

2、索引赋值

如果通过索引赋值时,索引超过了范围,同样会引起Array大小的变化

let arr = ['A', 'B', 'C'];

// 索引超出范围会导致数组大小自动调整:
arr[5] = 'x';
console.log(arr); // arr变为['A', 'B', 'C', undefined, undefined, 'x']

不建议,访问索引时要确保索引不会越界。 

大多数其他编程语言不允许直接改变数组的大小,越界访问索引会报错。然而,JavaScript的Array却不会有任何错误。尝试访问超出数组长度的索引将返回undefined

三、数组的相关操作

3-1、indexOf搜索一个指定的元素的位置

var arr = [10, 20, '30', 'xyz'];
arr.indexOf(10); // 元素10的索引为0
arr.indexOf(20); // 元素20的索引为1
arr.indexOf(30); // 元素30没有找到,返回-1
arr.indexOf('30'); // 元素'30'的索引为2

3-2、slice截取Array的部分元素,然后返回一个新的Array

slice()就是对应String的substring()版本

var arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];

arr.slice(0, 3); // 从索引0开始,到索引3结束,但不包括索引3: ['A', 'B', 'C']
arr.slice(3); // 从索引3开始到结束: ['D', 'E', 'F', 'G']

注意到slice()的起止参数包括开始索引,不包括结束索引

如果不给slice()传递任何参数,它就会从头到尾截取所有元素。利用这一点,我们可以很容易地复制一个Array:

var arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];

var aCopy = arr.slice();
aCopy; // ['A', 'B', 'C', 'D', 'E', 'F', 'G']

aCopy === arr; // false

3-3、push和pop

push()向Array的末尾添加若干元素,pop()则把Array的最后一个元素删除掉:

var arr = [1, 2];
arr.push('A', 'B'); // 返回Array新的长度: 4
arr; // [1, 2, 'A', 'B']

arr.pop(); // pop()返回'B'
arr; // [1, 2, 'A']

arr.pop(); arr.pop(); arr.pop(); // 连续pop 3次
arr; // []

arr.pop(); // 空数组继续pop不会报错,而是返回undefined
arr; // []

3-4、unshift和shift

如果要往Array的头部添加若干元素,使用unshift()方法,shift()方法则把Array的第一个元素删掉:

var arr = [1, 2];
arr.unshift('A', 'B'); // 返回Array新的长度: 4
arr; // ['A', 'B', 1, 2]

arr.shift(); // 'A'
arr; // ['B', 1, 2]

arr.shift(); arr.shift(); arr.shift(); // 连续shift 3次
arr; // []

arr.shift(); // 空数组继续shift不会报错,而是返回undefined
arr; // []

3-5、splice()方法

将数组按照我们自己指定的顺序排序。

splice()方法是修改Array的“万能方法”,它可以从指定的索引开始删除若干元素,然后再从该位置添加若干元素:

        var arr = ['Microsoft', 'Apple', 'Yahoo', 'AOL', 'Excite', 'Oracle'];
        // 只删除,不添加:
        arr.splice(2, 2);
        console.log(arr); // ['Microsoft', 'Apple', 'Excite', 'Oracle']

        // 只添加,不删除:
        arr.splice(2, 0, 'Google', 'Facebook'); // 返回[],因为没有删除任何元素
        console.log(arr); // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Excite', 'Oracle']

        // 从索引2开始删除3个元素,然后再添加两个元素:
        arr.splice(2, 3, 'Google', 'Facebook'); // 返回删除的元素 ['Microsoft', 'Apple', 'Oracle']
        console.log(arr); // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']

3-6、数组的排序

1、sort()方法

sort()可以对当前Array进行排序,它会直接修改当前Array的元素位置,直接调用时,按照默认顺序排序:

var arr = ['B', 'C', 'A'];
arr.sort();
arr; // ['A', 'B', 'C']

2、reverse()方法

reverse()把整个Array的元素给调个个,也就是反转

var arr = ['one', 'two', 'three'];
arr.reverse(); 
arr; // ['three', 'two', 'one']

3-6、concat连接两个Array

var arr = ['A', 'B', 'C'];
var added = arr.concat([1, 2, 3]);
added; // ['A', 'B', 'C', 1, 2, 3]
arr; // ['A', 'B', 'C']

【注意】:

concat()方法并没有修改当前Array,而是返回了一个新的Array

实际上,concat()方法可以接收任意个元素和Array,并且自动把Array拆开,然后全部添加到新的Array里:

var arr = ['A', 'B', 'C'];
arr.concat(1, 2, [3, 4]); // ['A', 'B', 'C', 1, 2, 3, 4]

只能拆开一维数组:

 

3-7、join用指定元素连接数组并返回字符串 

join()方法把当前Array的每个元素都用指定的字符串连接起来,然后返回连接后的字符串:

var arr = ['A', 'B', 'C', 1, 2, 3];
arr.join('-'); // 'A-B-C-1-2-3'

如果Array的元素不是字符串,将自动转换为字符串后再连接。

3-8、数组的过滤:filter() 方法

虽然 filter() 方法不直接修改原数组,但它可以根据提供的函数来创建一个新数组,这个新数组包含通过所提供函数实现的测试的所有元素。这可以间接用于“删除”不符合条件的元素。 

let fruits = ["Banana", "Orange", "Apple", "Mango"];  

// 排除"Orange"  
let filteredFruits = fruits.filter(fruit => fruit !== "Orange"); 
console.log(filteredFruits); // 输出: ["Banana", "Apple", "Mango"]

注意:filter() 方法不会改变原数组 fruits

四、多维数组

数组的某个元素又是一个Array,则可以形成多维数组,例如:

var arr = [[1, 2, 3], [400, 500, 600], '-'];

// 通过索引取到500这个值
var x = arr[1][1];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值