Javascript扩展数组,因此它可以复制和反转

时间:2017-02-17 21:57:26

标签: javascript

如果我有一个类似[1,2,3,4]的数组,并且我想复制并反转它,我该如何让它返回[1,2,3,4,4,3,2,1]

Array.prototype.duplicateAndReverse = function() {
  const initial = this;
  const reversed = initial.reverse();
  return initial.concat(reversed);
}

我在这里做错了什么?它返回[4,3,2,1,4,3,2,1]

5 个答案:

答案 0 :(得分:2)

试试这个:



Array.prototype.duplicateAndReverse = function() {
    const initial = this;
    const reversed = initial.slice().reverse();
    return initial.concat(reversed);
}

var myArray = [1,2,3,4];
alert(myArray.duplicateAndReverse());




您的代码正在反转initial以及将reversed设置为结果,因此您有两个相同(反向)的数组。相反,使用.slice()复制初始数组,然后将其反转。

答案 1 :(得分:2)



var arr = [1,2,3,4];

for(var len = arr.length; len; len--)
  arr.push(arr[len - 1]);
  
console.log(arr);




我不建议你弄乱Array.prototype,但这就是你想要的:



Array.prototype.duplicateAndReverse = function() {
  let res = this.slice(); // create another copy so the original array will stay intact
  for(var len = res.length; len; len--)
    res.push(res[len - 1]);
  return res;
}

let arr = [1, 2, 3, 4];
console.log(arr.duplicateAndReverse());




答案 2 :(得分:2)

问题在于您尝试将初始数组转换为原位。
使用以下优化解决方案:



Array.prototype.duplicateAndReverse = function() {
    return this.concat(this.slice().reverse());
} 

console.log([1,2,3,4].duplicateAndReverse());




要保留原始数组并创建其反向副本,请使用Array.prototype.slice()函数并结合Array.prototype.reverse()函数

答案 3 :(得分:2)

这是您的问题,因为reverse()也会反转原始数组 ARR

var arr = [1,2,3,4]
var dup = arr.reverse()
console.log(arr) // => [4, 3, 2, 1]
console.log(dup) // => [4, 3, 2, 1]

您需要先克隆原始数组

var dup = arr.slice().reverse()

然后您可以连接2个数组以获得结果。快乐的编码!

答案 4 :(得分:1)

东方解决方案,hihi。



var arr = [1,2,3,4];
var newArr = [];

arr.forEach((_,i) => newArr.unshift(arr[arr.length-i-1]) && newArr.push(arr[arr.length-i-1]))

console.log(newArr);