在 JavaScript 中将项目从一个数组交换到另一个数组的优雅方式?

Chr*_*rry 2 javascript arrays oop prototype object

有没有一种优雅的方式使用 vanilla JS 将项目从一个数组交换到另一个数组?

如果您正在为运动队构建一个简单的应用程序,则此功能会起作用。在给定的球队中,当您从首发阵容 (array1) 中换出一名球员时,您将替换为替补阵容 (array2) 中的一名球员。

一旦做出选择,数组就会更新,从数组 2 中选择的数组项现在出现在数组 1 中,反之亦然。

伪代码示例:
首发阵容 = Bob、Susan、Kevin、Jack、Tim
Substitude 阵容 = George、Steve、Martha 替补

出场的
球员:Jack替补出场的球员:Martha

// JS 魔术激活!(在此处插入您的巧妙代码。)

结果:
首发阵容:鲍勃、苏珊、凯文、玛莎、蒂姆
替补阵容:乔治、史蒂夫、杰克

我找到了一个优雅的解决方案,可以使用原型方法交换单个数组中两个项目的顺序。但是,如果您要处理两个不同数组中的两个项目,这将不起作用。

我的问题不是关于解决方案是否可行(当然是可行的),但最好的方法是使用干净、精确和优雅的代码,而不需要一堆 for 循环意大利面。

Nin*_*olz 5

您可以获取所需元素的索引并使用解构赋值

var swap = (a1, a2, v1, v2) => {
        var i = a1.indexOf(v1),
            j = a2.indexOf(v2);

        [a1[i], a2[j]] = [a2[j], a1[i]];
    },
    array1 = ['Bob', 'Susan', 'Kevin', 'Jack', 'Tim'],
    array2 = ['George', 'Steve', 'Martha'];

swap(array1, array2, 'Jack', 'Martha')

console.log(array1);
console.log(array2);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)