首页 > 解决方案 > 交换一个数组元素并移动其余元素

问题描述

var arr = ['100', 'A', 'B', 'C', 'D', 'E', 'F'];

var newIndex = 6;    // index where we want to swap the element
var oldIndex = 0;    // index from where we swapped the element
var replaceBy = arr[oldIndex];

if (newIndex < oldIndex) {
    for (var i = newIndex; i <= oldIndex; i++) {
        var saveCurrent = arr[i];
        arr[i] = replaceBy;
        replaceBy = saveCurrent;
    }
} else if (newIndex > oldIndex) {
    for (var i = newIndex; i >= oldIndex; i--) {
        var saveCurrent = arr[i];
        arr[i] = replaceBy;
        replaceBy = saveCurrent;
    }
}
console.log(arr); // logs out ["A", "B", "C", "D", "E", "F", "100"] 

是否有 JavaScript 方法或更好的解决方案来交换数组元素并移动其余元素?

我正在寻找更好的解决方案,可能只使用 1 个循环。到目前为止,我想出了上述解决方案。ifelse if具有相同的代码,但for block. 交换后,数组将根据索引向右或向左移动。

标签: javascript

解决方案


您可以拿走Array#copyWithin并移动零件,以便为交换元素腾出位置。

const
    move = (array, from, to) => {
        const value = array[from];

        if (from < to) array.copyWithin(from, from + 1, to + 1);
        else array.copyWithin(to + 1, to, from + 1);
        array[to] = value;
        return array;
    };

console.log(...move(['100', 'A', 'B', 'C', 'D', 'E', 'F'], 0, 6));
console.log(...move(['100', 'A', 'B', 'C', 'D', 'E', 'F'], 6, 0));


推荐阅读