关于javascript:JavaScript数组反转教程

44次阅读

共计 2511 个字符,预计需要花费 7 分钟才能阅读完成。

在工作面试和编码测试中,反转具备特定限度的数组是最常见的挑战之一。

本教程将向您展现在 JavaScript 中应用和不应用 reverse 办法来反转数组的五种办法,以及能够应用的代码段。

如何应用 Reverse 办法反转 JavaScript 中的数组

当须要在 JavaScript 中反转数组时,能够应用 reverse 办法,该办法将最初一个元素放在第一位,而第一个元素放在最初:

let numbers = [1, 2, 3, 4, 5];
let reversedNumbers = numbers.reverse();

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

然而请记住,reverse 办法也会批改原始数组:

let numbers = [1, 2, 3, 4, 5];
let reversedNumbers = numbers.reverse();

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

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

一些编码挑战可能心愿您保留原始数组,因而让咱们看一下如何在不更改原始数组的状况下反转数组。

如何应用 Spread 运算符反转 JavaScript 中的数组

你能够联合应用扩大运算符 (Spread) 和 reverse 办法来反转数组,而无需更改原始数组。

首先,通过用方括号 [] 括住 spread 语法,将 spread 运算符返回的元素放入新数组中:

[...numbers]

而后,你在数组上调用 reverse 办法。这样,将在新数组而不是原始数组上执行 reverse 办法:

let numbers = [1, 2, 3, 4, 5];
let reversedNumbers = [...numbers].reverse();

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

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

留神spread 办法是 ES6 语法,当你须要反对较旧的浏览器或要应用 ES5 语法时,能够联合应用 slicereverse 办法。让咱们当初来看。

如何应用 Slice 和 Reverse 办法反转 JavaScript 中的数组

slice 办法用于将所选元素作为新数组返回,当你调用不带任何参数的办法时,它将返回一个与原始数组雷同的新数组(从第一个元素到最初一个元素)。

接下来,你在新返回的数组上调用 reverse 办法,这就是为什么原始数组不反转的起因:

let numbers = [1, 2, 3, 4, 5];
let reversedNumbers = numbers.slice().reverse();

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

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

如何在没有 Reverse 办法的状况下在 JavaScript 中反转数组

有时面试会挑战你对数组进行逆向操作,而不采纳 reverse 办法。没问题!你能够应用 for 循环和数组 push 办法的组合,就像上面的例子。

let numbers = [1, 2, 3, 4, 5];
let reversedNumbers = [];

for(let i = numbers.length -1; i >= 0; i--) {reversedNumbers.push(numbers[i]);
}

console.log(reversedNumbers);

如何用 JS 编写本人的反转函数

最初,假如你的工作是编写本人的反转函数,该函数须要在不创立正本的状况下反转数组。乍一看,这仿佛很简单,然而不必放心,因为它实际上很简略。

在这里你须要做的是替换数组的第一个和最初一个元素,而后替换第二个和倒数第二个元素,依此类推,直到替换了所有元素。

让咱们编写一个函数来做到这一点。

编写函数 customReverse,并应用 array.length - 1 作为变量,同时存储第一个索引为 0 和最初一个索引。

function customReverse(originalArray) {
  let leftIndex = 0;
  let rightIndex = originalArray.length - 1;
}

接下来,创立一个 while 循环,只有 leftIndex 小于 rightIndex,它就会运行。

在此循环内,替换 leftIndexrightIndex 的值,你能够将值之一长期存储在长期变量中:

while (leftIndex < rightIndex) {
  // 替换元素
  let temp = originalArray[leftIndex];
  originalArray[leftIndex] = originalArray[rightIndex];
  originalArray[rightIndex] = temp;
}

最初,将 leftIndex 向上挪动,将 rightIndex 向下挪动,当 while 循环反复时,它将替换倒数第二个元素,依此类推:

 function customReverse(originalArray) {

  let leftIndex = 0;
  let rightIndex = originalArray.length - 1;

  while (leftIndex < rightIndex) {

    // 用 temp 变量替换元素
    let temp = originalArray[leftIndex];
    originalArray[leftIndex] = originalArray[rightIndex];
    originalArray[rightIndex] = temp;

    // 将索引移到两头
    leftIndex++;
    rightIndex--;
  }
}

当没有其余要反转的元素时,循环将立刻进行。对于奇数的数组 leftIndexrightIndex 的值会相等,所以不必再替换。对于偶数的数组 leftIndex 将大于 rightIndex

你能够测试该性能以查看其是否失常工作,如下所示:

let myArray = [1, 2, 3, 4, 5];

customReverse(myArray);

console.log(myArray);

// output is [5, 4, 3, 2, 1]

正文完
 0