你需要知道的13个关于JavaScript数组的小技巧

557 阅读5分钟

译者:道奇
作者:Duomly
原文:13 useful JavaScript array tips and tricks you should know

数组是JavaScript中最常见的概念了,它为JavaScript的内部数据存储提供了很多可能性,考虑到在编程之初,数组是JavaScript最基础的主题之一,在这篇文章中,我会带来一些你可能不知道但是非常有用的小技巧!下面让我们开始。

1.从数组中移除重复项

怎样从JavaScript数组中提取唯一值,这是非常常见的JavaScript面试题,这个问题的即快速又简单的解决方法是使用new Set()方法。有两种途径可以做到,一种是通过.from() ,另外一种是使用扩展运算符(...)。

var fruits = ["banana", "apple", "orange", "watermelon", "apple", "orange", "grape", "apple"];


// 第一种方法
var uniqueFruits = Array.from(new Set(fruits));
console.log(uniqueFruits); 
// 返回 ["banana", "apple", "orange", "watermelon", "grape"]


// 第二种方法
var uniqueFruits2 = […new Set(fruits)];
console.log(uniqueFruits2);
// 返回["banana”, "apple", "orange", "watermelon", "grape"]

是不是很简单?

2.替换数组中指定的值

有时会需要替换数组中指定的值,有一种你可能还不知道的简单方法可以做到,为此,可以使用.splice(开始位置,移除的值,添加的值),然后传入三个参数,参数指定了从哪里开始修改,要修改多少个值和要添加的新值。

var fruits = ["banana”, "apple", "orange", "watermelon", "apple", "orange", "grape","apple"];
fruits.splice(0, 2, "potato", "tomato");
console.log(fruits);
// 返回["potato", "tomato", "orange", "watermelon", "apple", "orange", "grape","apple"]

3.不使用.map()映射数组

可能所有人都知道数组的.map()方法,另外有种不同的解决方法可以达到类似的效果并且代码也很干净,可以使用.from()方法达到目的。

var friends = [
    { name: 'John', age: 22 },
    { name: 'Peter', age: 23 },
    { name: 'Mark', age: 24 },
    { name: 'Maria', age: 22 },
    { name: 'Monica', age: 21 },
    { name: 'Martha', age: 19 },
]


var friendsNames = Array.from(friends, ({name}) => name);
console.log(friendsNames); 
//返回 ["John", "Peter", "Mark", "Maria", "Monica", "Martha"]

4.清空数组

有时候需要将有元素的数组清空,但不想一个一个移除它们,可以通过一行代码很简单的做到。清空数组只需要将数组的长度设置为0,这样就可以了。

var fruits = ["banana”, "apple", "orange", "watermelon", "apple", "orange", "grape","apple"];


fruits.length = 0;
console.log(fruits); // 返回 []

5.将数组转换成对象

有时候我们碰巧有个数组,但出于一些目的,需要一个带数据的对象,最快的方式就是使用扩展运算符(...)将数组直接转换成对象。

var fruits = ["banana","apple", "orange", "watermelon"];
var fruitsObj = { …fruits };
console.log(fruitsObj);
//返回{0: "banana", 1: "apple", 2: "orange", 3: "watermelon", 4: "apple", 5: "orange", 6: "grape", 7: "apple"}

6.给数组填值

有时候我们创建了数组,然后要填充一些数据,或者需要一个有值的数组,这种情况下.fill()方法可以轻松解决。

var newArray = new Array(10).fill("1");
console.log(newArray); 
// 返回 ["1", "1", "1", "1", "1", "1", "1", "1", "1", "1"]

7.合并数组

如果不用.concat()方法你知道怎样将多个数组合并为一个吗?有用一行代码就能将任意数量的数组合并为一个的简单方法。你可能已经知道,扩展运算符(...)在处理数组上非常有用,在这种场景下也一样。

var fruits = ["apple", "banana", "orange"];
var meat = ["poultry", "beef", "fish"];
var vegetables = ["potato", "tomato", "cucumber"];
var food = […fruits, …meat, …vegetables];
console.log(food); 
// ["apple", "banana", "orange","poultry", "beef", "fish","potato", "tomato", "cucumber"]

8. 找出两个数组的交集

这个同样也是Javascript面试中最受欢迎的挑战之一,因为它展示了你是否可以使用数组方法以及你的逻辑是什么。为了找到两个数组的交集,将使用前面已经介绍的方法,为了确保检查的数组中没有重复值,我们将使用.filter方法和.includes方法。最后会得到一个数组,它有两个数组中都存在的值。检查代码:

var numOne = [0, 2, 4, 6, 8, 8];
var numTwo = [1, 2, 3, 4, 5, 6];
var duplicatedValues = […new Set(numOne)].filter(item => numTwo.includes(item));
console.log(duplicatedValues); // 返回 [2, 4, 6]

9. 移除数组中的假(falsy)值

首先,定义一下假值。在JavaScript中,假值有false, 0, "", null, NaN, undefined。现在要将这些值从指定的数组中移除,为此,我们将使用.filter()方法。

var mixedArr = [0, "blue", "", NaN, 9, true, undefined, "white", false];
var trueArr = mixedArr.filter(Boolean);
console.log(trueArr); // 返回 ["blue", 9, true, "white"]

10. 从数组中获取随机值

有时候,我们需要随机从数组中选择一个值,为了使用简短、快速并且保持代码简洁的方式,可以根据数组的长度获取随机索引值,看一下代码:

var colors = ["blue", "white", "green", "navy", "pink", "purple", "orange"];
var randomColor = colors[(Math.floor(Math.random() * (colors.length)))]

11. 反转数组

当我们需要翻转数组时不需要通过复杂的循环和函数来创建它,有一种简单的数组方法能帮我们做到,并且只要一行代码,就能反转数组。下面就检查一下:

var colors = ["blue", "white", "green", "navy", "pink", "purple", "orange"];
var reversedColors = colors.reverse();
console.log(reversedColors); 
// returns ["orange", "purple", "pink", "navy", "green", "white", "blue"]

12. .lastIndexOf()方法

在JavaScript中,有一个有趣的方法,它允许查找指定元素最后一次出现的索引值,例如,如果数组有重复值,可以找到它最后出现的位置,看例子:

var nums = [1, 5, 2, 6, 3, 5, 2, 3, 6, 5, 2, 7];
var lastIndex = nums.lastIndexOf(5);
console.log(lastIndex); // 返回 9

13. 求和数组中所有值

这是另外一个在面试开发工程师时经常碰到的挑战,没什么可怕的,可以使用.reduce方法一行代码就可以解决,看代码:

var nums = [1, 5, 2, 6];
var sum = nums.reduce((x, y) => x + y);
console.log(sum); // 返回 14

总结

在这篇文章中,我给出了13个技巧帮助你编写简洁的代码,同样记住JavaScript中还有很多值得探索的不同技巧,不仅是关于数组的,还有其他数据类型的,我希望你能喜欢这篇文章中提供的这些解决方法,你可以使用它们来改进开发过程。

祝coding愉快!