Javascript-给定一个数组,交换第一个和最后一个,第三个和第三个倒数第二个,等等



这个想法是具有以下输入/输出:

输入将为 ['true',42,'Ada',2,'pizza'
  • ],输出为 ['pizza',42,'Ada',2,'true'];
  • 对于输入 [1,2,3,4,5,6],输出为 [6,2,4,3,5,1]

这是我目前拥有的代码:

function swapTowardsTheCenter(array) {
var len = array.length;
var idx = 0;
var lastIdx = array.length -1;
while (idx<=len/2 && lastIdx>=len/2) {
var temp = array[idx];
array[idx] = array[lastIdx];
array[lastIdx] = temp;
idx = idx + 2;
lastIdx = lastIdx - 2;
}
return array;
}

谁能帮我找到我的错误?谢谢!

这是代码的替代方法,但执行相同的操作。

function swapTowardsTheCenter(arr) {
var len = arr.length;
for ( var i = 0; i < Math.floor(len/2); i+=2 ) {
var sw = arr[i];
arr[i] = arr[len - 1 - i];
arr[len - 1 - i] = sw;
}
return arr;
}
console.log(swapTowardsTheCenter(['true',42,'Ada',2,'pizza']));
console.log(swapTowardsTheCenter([1,2,3,4,5,6]));
console.log(swapTowardsTheCenter(['f1','f2','f3', 'c', 'b3', 'b2' ,'b1']));

结果:

[ 'pizza', 42, 'Ada', 2, 'true' ]
[ 6, 2, 4, 3, 5, 1 ]
[ 'b1', 'f2', 'b3', 'c', 'f3', 'b2', 'f1' ]

你可以采用一种方法,用一个变量来表示左索引和数组的长度,然后你用索引和长度来计算右索引,

function swap(array) {
var l = array.length,
i = 0;

while (i < l / 2) {
[array[i], array[l- 1- i]] = [array[l - i - 1], array[i]];
i += 2;
}
return array;
}
console.log(swap(['true', 42, 'Ada', 2, 'pizza'])); // ['pizza', 42, 'Ada', 2, 'true']
console.log(swap([1, 2, 3, 4, 5, 6]));              // [6, 2, 4, 3, 5, 1]
.as-console-wrapper { max-height: 100% !important; top: 0; }

或者,您为左右索引获取两个变量来交换项目。

function swap(array) {
var left = 0,
right = array.length - 1;

while (left < right) {
[array[left], array[right]] = [array[right], array[left]];
left += 2;
right -= 2;
}
return array;
}
console.log(swap(['true', 42, 'Ada', 2, 'pizza'])); // ['pizza', 42, 'Ada', 2, 'true']
console.log(swap([1, 2, 3, 4, 5, 6]));              // [6, 2, 4, 3, 5, 1]
.as-console-wrapper { max-height: 100% !important; top: 0; }

利用 ES6 点差运算符和解构赋值的较短替代方案:

function swap(input) {
var inputCopy = [...input];
var [first, last] = [inputCopy.splice(0,1), inputCopy.splice(-1)];
return  [...last, ...inputCopy, ...first];
}

只需在此处添加我的代码,任何可能遇到此问题的人都可以尝试使用此代码,该代码绝对可以完成工作,但远远超出了反转整个数组的主要目标,而不仅仅是将第一秒反转到倒数,第二秒到最后一秒等等。

function swapTowardCenter(arr){
// Enter code below
var newArr = [];
for(var i = arr.length -1; i >= 0 ; i--){
newArr.push(arr[i]);
}
console.log(newArr)
// return newArr;
}
swapTowardCenter([true,42,"Ada",2,"pizza"])

相关内容

最新更新