如何在不使用库的情况下反转 JavaScript 中的数组?

IT技术 javascript arrays
2021-01-26 09:14:22

我正在使用arrays按顺序保存一些数据,并且我想添加一个用户可以反转列表的功能。我想不出任何可能的方法,所以如果有人知道如何,请帮忙。

6个回答

Javascript 有一个reverse()可以在数组中调用方法

var a = [3,5,7,8];
a.reverse(); // 8 7 5 3

不确定这是否就是您所说的“您不能使用的库”的意思,我猜这与实践有关。如果是这种情况,您可以实现自己的版本.reverse()

function reverseArr(input) {
    var ret = new Array;
    for(var i = input.length-1; i >= 0; i--) {
        ret.push(input[i]);
    }
    return ret;
}

var a = [3,5,7,8]
var b = reverseArr(a);

请注意,内置.reverse()方法对原始数组进行操作,因此您无需重新分配a

使用 [...arr].reverse() 进行无损反转
2021-04-06 09:14:22

Array.prototype.reverse()这就是您完成这项工作所需的全部内容。请参阅兼容性表

var myArray = [20, 40, 80, 100];
var revMyArr = [].concat(myArray).reverse();
console.log(revMyArr);
// [100, 80, 40, 20]

不错,无损
2021-03-29 09:14:22
需要注意的是,将concat对象引用复制到新数组中。原始数组和新数组都引用同一个对象...
2021-04-03 09:14:22

这是一个功能性的方法来做到这一点。

const array = [1,2,3,4,5,6,"taco"];

function reverse(array){
  return array.map((item,idx) => array[array.length-1-idx])
}
如果您正在编写纯函数或由于任何其他原因不想改变原始数组,这很好。
2021-03-21 09:14:22
如果您不想更改原始数组,那么这是一个很好的简短解决方案!
2021-04-10 09:14:22

20 字节

let reverse=a=>[...a].map(a.pop,a)
是 CodeGolf 吗?
2021-03-19 09:14:22
@user169320[...a]克隆数组,.map(a.pop, a)弹出数组(返回数组的最后一个元素)并将其推送到新数组,这会导致数组反转。
2021-03-24 09:14:22
有人可以为我解释一下吗?
2021-04-03 09:14:22
当您传递稍后用于执行的函数引用(因此不执行它)时,该函数引用您想要执行它的所有对象上都没有任何痕迹:它只是一个普通函数。在上面的代码中,您也可以使用[].pop代替a.pop: 它是完全相同的功能。当 的实现map执行该函数时,它不知道应该在哪个数组上执行。如果你不说,它就会失败。的第二个参数为map提供必要的信息map
2021-04-03 09:14:22
...以及map确保pop使用aas执行的第二个参数this,就像你会做的一样a.pop()
2021-04-13 09:14:22

我见过的最短的反向方法是这个:

let reverse = a=>a.sort(a=>1)
我并不是建议这是一个好的做法,只是认为这是对众所周知的操作的一种有趣的、非常规的做法。
2021-03-21 09:14:22
这不取决于排序是如何实现的吗?由于比较函数不一致(即它总是返回 1),因此行为未定义。
2021-03-27 09:14:22
这样做的问题是它可能无法使用不同的解释器反转数组。
2021-04-12 09:14:22
事实上,我很惊讶地看到它的工作方式。[1,2,3,4].sort(a=>1)例如返回正确答案。这个想法是它与 sort 方法如何采用排序算法密切相关,并且由于它是一个接一个地执行的,因此它总是交换。
2021-04-14 09:14:22