Javascript中的反向数组而不更改原始数组

2020/10/18 10:41 · javascript ·  · 0评论

Array.prototype.reverse 反转数组的内容到位(有突变)...

是否有类似的简单策略可用于在不更改原始数组内容的情况下反转数组(无突变)?

您可以使用片() 使该拷贝逆转()

var newarray = array.slice().reverse();

在ES6中:

const newArray = [...array].reverse()

ES6的另一个变体:

我们还可以.reduceRight()用于创建反向数组,而无需实际对其进行反转。

let A = ['a', 'b', 'c', 'd', 'e', 'f'];

let B = A.reduceRight((a, c) => (a.push(c), a), []);

console.log(B);

有用的资源:

尝试以下递归解决方案:

const reverse = ([head, ...tail]) => 
    tail.length === 0
        ? [head]                       // Base case -- cannot reverse a single element.
        : [...reverse(tail), head]     // Recursive case

reverse([1]);               // [1]
reverse([1,2,3]);           // [3,2,1]
reverse('hello').join('');  // 'olleh' -- Strings too!                              

ES6替代使用.reduce()和扩展。

const foo = [1, 2, 3, 4];
const bar = foo.reduce((acc, b) => ([b, ...acc]), []);

基本上,它所做的就是用foo中的下一个元素创建一个新数组,并在b之后的每次迭代中散布累积的数组。

[]
[1] => [1]
[2, ...[1]] => [2, 1]
[3, ...[2, 1]] => [3, 2, 1]
[4, ...[3, 2, 1]] => [4, 3, 2, 1]

.reduceRight()如上文所述,也可以选择,但不包含.push()突变。

const baz = foo.reduceRight((acc, b) => ([...acc, b]), []);

有多种无需修改即可反转阵列的方法。其中两个是

var array = [1,2,3,4,5,6,7,8,9,10];

// Using Splice
var reverseArray1 = array.splice().reverse(); // Fastest

// Using spread operator
var reverseArray2 = [...array].reverse();

// Using for loop 
var reverseArray3 = []; 
for(var i = array.length-1; i>=0; i--) {
  reverseArray.push(array[i]);
}

性能测试http://jsben.ch/guftu

INTO纯Javascript:

function reverseArray(arr, num) {
  var newArray = [];
  for (let i = num; i <= arr.length - 1; i++) {
    newArray.push(arr[i]);
  }

  return newArray;
}

仅出于说明目的,使用变量交换进行原位反转(但如果您不想变异,则需要副本)

const myArr = ["a", "b", "c", "d"];
const copy = [...myArr];
for (let i = 0; i < (copy.length - 1) / 2; i++) {  
    const lastIndex = copy.length - 1 - i; 
    [copy[i], copy[lastIndex]] = [copy[lastIndex], copy[i]] 
}

es6:

const reverseArr = [1,2,3,4].sort(()=>1)
本文地址:http://javascript.askforanswer.com/javascriptzhongdefanxiangshuzuerbugenggaiyuanshishuzu.html
文章标签: ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!