likes
comments
collection
share

深入理解JavaScript 数组的一些方法

作者站长头像
站长
· 阅读数 34

在 JavaScript 中,数组是一种非常重要的数据结构,它提供了丰富的方法来操作和处理数据。本文将深入探讨 JavaScript 中一些常用的数组方法,以及它们的用法和示例。

1. push()pop()

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

let fruits = ['apple', 'banana', 'orange'];
fruits.push('grape');
// 现在 fruits 数组为 ['apple', 'banana', 'orange', 'grape']

let removedFruit = fruits.pop();
// removedFruit 的值为 'grape',fruits 数组为 ['apple', 'banana', 'orange']

2. unshift()shift()

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

let fruits = ['apple', 'banana', 'orange'];
fruits.unshift('grape');
// 现在 fruits 数组为 ['grape', 'apple', 'banana', 'orange']

let removedFruit = fruits.shift();
// removedFruit 的值为 'grape',fruits 数组为 ['apple', 'banana', 'orange']

3. splice()

splice() 方法用于在指定位置添加或删除元素。

let fruits = ['apple', 'banana', 'orange'];
fruits.splice(1, 0, 'grape', 'kiwi');
// 现在 fruits 数组为 ['apple', 'grape', 'kiwi', 'banana', 'orange']

fruits.splice(2, 1);
// 移除 'kiwi',fruits 数组为 ['apple', 'grape', 'banana', 'orange']

4. slice()

slice() 方法用于从现有数组中返回选定的元素。

let fruits = ['apple', 'banana', 'orange', 'grape', 'kiwi'];
let citrus = fruits.slice(2, 4);  // 区域为左闭右开
// citrus 数组为 ['orange', 'grape']

5. concat()

concat() 方法用于连接两个或多个数组。

let fruits = ['apple', 'banana'];
let moreFruits = ['orange', 'grape'];
let allFruits = fruits.concat(moreFruits);
// allFruits 数组为 ['apple', 'banana', 'orange', 'grape']

6. join()

join() 方法将数组的所有元素连接成一个字符串。

用法:

array.join(separator);
  • separator(可选): 指定用作分隔符的字符串。如果省略该参数,则默认为逗号 ","。

示例:

let fruits = ["apple", "banana", "orange"];
let joinedString = fruits.join(", ");
console.log(joinedString); // "apple, banana, orange"

应用场景: 将数组中的元素用特定字符连接成一个字符串。常见于输出数组内容、生成CSV文件等场景。

7. reverse()

用于颠倒数组中元素的顺序。它会修改原始数组,将其顺序逆转,并返回逆序后的数组。这意味着原始数组会被改变。

下面是一个简单的示例:

let array = [1, 2, 3, 4, 5];
console.log(array); // 输出: [1, 2, 3, 4, 5]

array.reverse();
console.log(array); // 输出: [5, 4, 3, 2, 1]

reverse()方法不会创建新的数组,而是在原始数组上直接操作。所以在使用它时需要注意原始数组会被改变。

8. sort()

默认情况下,sort()方法会将数组的元素按照Unicode字符顺序进行排序,也就是按照字符串的顺序进行排序。例如,数字会被转换为字符串,然后按照字符顺序进行排序,这可能导致一些意想不到的结果。

const array = [40, 1, 5, 200];
array.sort();
console.log(array); // 输出: [1, 200, 40, 5]

要按照数字的大小进行排序,可以传入一个比较函数作为参数给sort()方法。比较函数接收两个参数,通常被称为a和b,表示数组中的两个元素。如果比较函数返回负数,那么a会被排在b的前面;如果返回正数,那么b会被排在a的前面;如果返回0,a和b的位置保持不变。

const array = [40, 1, 5, 200];
array.sort((a, b) => a - b);
console.log(array); // 输出: [1, 5, 40, 200]

如果要按照其他条件进行排序,只需相应地修改比较函数即可。

9. indexOf()

用于查找数组中某个元素第一次出现的位置,并返回其索引值。如果数组中不存在该元素,则返回-1。

const array = [1, 2, 3, 4, 5];
console.log(array.indexOf(3)); // 输出: 2
console.log(array.indexOf(6)); // 输出: -1

indexOf()方法接受一个参数,即要查找的元素。如果要查找的元素在数组中出现多次,indexOf()只会返回第一次出现的位置。

const array = [1, 2, 3, 2, 4, 5];
console.log(array.indexOf(2)); // 输出: 1

如果要查找的元素是一个对象,那么indexOf()方法会根据对象的引用来查找。

const array = [{name: 'Alice'}, {name: 'Bob'}, {name: 'Charlie'}];
console.log(array.indexOf({name: 'Bob'})); // 输出: -1

这段代码中,array数组包含了三个对象,每个对象都有一个name属性。然后我们尝试使用indexOf()方法查找一个具有相同name属性值的新对象{name: 'Bob'}

根据我们的期望,由于array数组中确实有一个对象的name属性值为'Bob',我们可能期待indexOf()方法返回该对象在数组中的索引,即1。然而,实际情况并非如此。

indexOf()方法在查找时使用的是严格相等运算符(===)进行比较,而不是比较对象属性值。因此,即使数组中有一个对象的属性值与我们要查找的对象相同,但由于它们是两个不同的对象引用,严格相等运算符返回的是false,导致indexOf()方法无法找到匹配的对象,从而返回-1。

换句话说,JavaScript中的对象是按引用传递的,而非按值传递。所以两个对象即使具有相同的属性值,但如果它们是两个不同的对象引用,JavaScript会认为它们是不同的对象。

10. includes()

includes() 方法是 JavaScript 数组的一个方法,用于判断数组是否包含某个特定元素,并返回相应的布尔值。

const array = [1, 2, 3, 4, 5];
console.log(array.includes(3)); // 输出: true
console.log(array.includes(6)); // 输出: false

includes() 方法接受一个参数,即要检查是否存在的元素。如果数组中存在这个元素,则返回 true,否则返回 false

indexOf() 方法不同的是,includes() 方法不关心元素的索引位置,只要数组中包含了这个元素就会返回 true。另外,对于 NaN 的处理也不同,indexOf() 方法认为 NaN 不等于自身,而 includes() 方法会正确地返回包含 NaN 的数组元素。

11.filter()

filter() 是 JavaScript 数组的一个高阶函数,用于过滤数组中的元素,并返回一个新的数组,新数组中包含满足过滤条件的元素。

const numbers = [1, 2, 3, 4, 5];
const evenNumbers = numbers.filter(number => number % 2 === 0);
console.log(evenNumbers); // 输出: [2, 4]

filter() 方法接受一个回调函数作为参数,这个回调函数会被传入数组中的每个元素,并期望返回一个布尔值。如果回调函数返回 true,则表示当前元素满足过滤条件,会被包含在新数组中;如果返回 false,则表示不满足过滤条件,不会被包含在新数组中。

filter() 方法不会改变原数组,而是返回一个新数组,其中包含满足过滤条件的元素。因此,原数组保持不变。

const words = ['hello', 'world', 'goodbye', 'hi'];
const filteredWords = words.filter(word => word.length > 3);
console.log(filteredWords); // 输出: ['hello', 'world', 'goodbye']

在这个例子中,filter() 方法根据单词的长度是否大于 3 来过滤数组中的元素,最后返回一个包含满足条件的元素的新数组。

以上就是 JavaScript 中一些常用的数组方法。通过灵活运用这些方法,您可以高效地处理数组,并实现各种数据操作需求。

转载自:https://juejin.cn/post/7365533351452033060
评论
请登录