如果我有一个类似[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]
答案 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);