想法是拥有以下输入/输出:
以下是我目前的代码:
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;
}
有人可以帮我找到我的错误吗?谢谢!
答案 0 :(得分:0)
这是您的代码的替代品,但做同样的事情。
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' ]
答案 1 :(得分:0)
你可以采用一个变量为左索引和数组的长度,然后你采取索引和长度来计算正确的索引,
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; }
答案 2 :(得分:0)
利用ES6 Spread运算符和解构赋值的较短替代方案:
function swap(input) {
var inputCopy = [...input];
var [first, last] = [inputCopy.splice(0,1), inputCopy.splice(-1)];
return [...last, ...inputCopy, ...first];
}