Der*_*會功夫 34 javascript arrays
我正在使用array
s 保存一些数据,我想添加一个用户可以反转列表的功能.我想不出任何可能的方法,所以如果有人知道如何,请帮助.
And*_*ong 90
Javascript有一个reverse()
可以在数组中调用的方法
var a = [3,5,7,8];
a.reverse(); // 8 7 5 3
Run Code Online (Sandbox Code Playgroud)
不确定这是"你不能使用的图书馆"的意思,我猜测与练习有关.如果是这种情况,您可以实现自己的版本.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);
Run Code Online (Sandbox Code Playgroud)
请注意,内置.reverse()
方法在原始阵列上运行,因此您无需重新分配a
.
Roh*_*kar 24
Array.prototype.reverse()
是你完成这项工作所需要的一切.请参阅兼容性表.
var arr = [20, 40, 80, 100];
console.log(arr.reverse());
// [100, 80, 40, 20]
Run Code Online (Sandbox Code Playgroud)
Nic*_*k B 20
const original = [1, 2, 3, 4];
const reversed = [...original].reverse(); // 4 3 2 1
Run Code Online (Sandbox Code Playgroud)
简洁,保持原文不变。
小智 17
这是一种功能性的方法.
const array = [1,2,3,4,5,6,"taco"];
function reverse(array){
return array.map((item,idx) => array[array.length-1-idx])
}
Run Code Online (Sandbox Code Playgroud)
Tor*_*ure 16
20个字节
let reverse=a=>[...a].map(a.pop,a)
Run Code Online (Sandbox Code Playgroud)
Eli*_*ady 10
我见过的最短的反向方法是这个:
let reverse = a=>a.sort(a=>1)
Run Code Online (Sandbox Code Playgroud)
两种方式:
计数器循环
function reverseArray(a) {
var rA = []
for (var i = a.length; i > 0; i--) {
rA.push(a[i - 1])
}
return rA;
}
Run Code Online (Sandbox Code Playgroud)
使用 .reverse()
function reverseArray(a) {
return a.reverse()
}
Run Code Online (Sandbox Code Playgroud)
function reverse(a){
for(i=0,j=a.length-1;i<j;)a[i]=a[j]+(a[j--]=a[i++],0)
}
Run Code Online (Sandbox Code Playgroud)
只是为了好玩,这里有一个比本机方法更快的替代实现.reverse
。
你可以做
var yourArray = ["first", "second", "third", "...", "etc"]
var reverseArray = yourArray.slice().reverse()
console.log(reverseArray)
Run Code Online (Sandbox Code Playgroud)
你会得到
["etc", "...", "third", "second", "first"]
Run Code Online (Sandbox Code Playgroud)
**
**
var a = [0, 1, 4, 1, 3, 9, 3, 7, 8544, 4, 2, 1, 2, 3];
a.map(a.pop,[...a]);
// returns [3, 2, 1, 2, 4, 8544, 7, 3, 9, 3, 1, 4, 1, 0]
Run Code Online (Sandbox Code Playgroud)
a.pop 方法取下最后一个元素并使用扩展运算符 () 放在前面
MDN 链接供参考:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/pop
这就是你想要的:
array.reverse();
Run Code Online (Sandbox Code Playgroud)
> var arr = [1,2,3,4,5,6];
> arr.reverse();
[6, 5, 4, 3, 2, 1]
Run Code Online (Sandbox Code Playgroud)
我已经对解决方案进行了一些测试,不仅可以反转数组,还可以制作其副本。这是测试代码。该reverse2
方法在 Chrome 中是最快的,但在 Firefox 中reverse
也是最快的。
var array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
var reverse1 = function() {
var reversed = array.slice().reverse();
};
var reverse2 = function() {
var reversed = [];
for (var i = array.length - 1; i >= 0; i--) {
reversed.push(array[i]);
}
};
var reverse3 = function() {
var reversed = [];
array.forEach(function(v) {
reversed.unshift(v);
});
};
console.time('reverse1');
for (var x = 0; x < 1000000; x++) {
reverse1();
}
console.timeEnd('reverse1'); // Around 184ms on my computer in Chrome
console.time('reverse2');
for (var x = 0; x < 1000000; x++) {
reverse2();
}
console.timeEnd('reverse2'); // Around 78ms on my computer in Chrome
console.time('reverse3');
for (var x = 0; x < 1000000; x++) {
reverse3();
}
console.timeEnd('reverse3'); // Around 1114ms on my computer in Chrome
Run Code Online (Sandbox Code Playgroud)
小智 5
这是一个不需要临时数组的版本。
function inplaceReverse(arr) {
var i = 0;
while (i < arr.length - 1) {
arr.splice(i, 0, arr.pop());
i++;
}
return arr;
}
// Useage:
var arr = [1, 2, 3];
console.log(inplaceReverse(arr)); // [3, 2, 1]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
65917 次 |
最近记录: |