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

时间:2018-06-12 05:10:05

标签: javascript arrays

想法是拥有以下输入/输出:

  • 输入将是['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;

}

有人可以帮我找到我的错误吗?谢谢!

3 个答案:

答案 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];
}