sfl*_*che 157 javascript arrays
Array.prototype.reverse 反转数组的内容(带有变异)......
是否有一个类似的简单策略来反转数组而不改变原始数组的内容(没有变异)?
Aru*_*hny 323
var newarray = array.slice().reverse();
Run Code Online (Sandbox Code Playgroud)
var array = ['a', 'b', 'c', 'd', 'e'];
var newarray = array.slice().reverse();
console.log('a', array);
console.log('na', newarray);Run Code Online (Sandbox Code Playgroud)
Bri*_*unt 85
在ES6中:
const newArray = [...array].reverse()
Run Code Online (Sandbox Code Playgroud)
Rag*_*ghu 21
const originalArray = ['a', 'b', 'c', 'd', 'e', 'f'];
const newArray = Array.from(originalArray).reverse();
console.log(newArray);Run Code Online (Sandbox Code Playgroud)
Pal*_*ine 11
该toReversed()方法以相反的顺序转置调用数组对象的元素并返回一个新数组。
const items = [1, 2, 3];
console.log(items); // [1, 2, 3]
const reversedItems = items.toReversed();
console.log(reversedItems); // [3, 2, 1]
console.log(items); // [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
浏览器兼容性
ES6的另一个变体:
我们还可以.reduceRight()用于创建反向数组,而无需实际对其进行反转。
let A = ['a', 'b', 'c', 'd', 'e', 'f'];
let B = A.reduceRight((a, c) => (a.push(c), a), []);
console.log(B);Run Code Online (Sandbox Code Playgroud)
有用的资源:
小智 6
ES6 的替代使用.reduce()和传播。
const foo = [1, 2, 3, 4];
const bar = foo.reduce((acc, b) => ([b, ...acc]), []);
Run Code Online (Sandbox Code Playgroud)
基本上它所做的是创建一个新数组,其中包含 foo 中的下一个元素,并在 b 之后为每次迭代扩展累积数组。
[]
[1] => [1]
[2, ...[1]] => [2, 1]
[3, ...[2, 1]] => [3, 2, 1]
[4, ...[3, 2, 1]] => [4, 3, 2, 1]
Run Code Online (Sandbox Code Playgroud)
或者.reduceRight()如上所述这里,但没有.push()突变。
const baz = foo.reduceRight((acc, b) => ([...acc, b]), []);
Run Code Online (Sandbox Code Playgroud)
尝试以下递归解决方案:
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!
Run Code Online (Sandbox Code Playgroud)
有多种方法可以在不修改的情况下反转数组。其中两个是
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]);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
46994 次 |
| 最近记录: |