是否有一种优雅的方法可以使用vanilla JS将项目从一个数组交换到另一个数组?
如果您正在为运动队构建一个简单的应用程序,此功能将起作用。在给定的团队中,当你从一个首发阵容(array1)中交换一个玩家时,你可以用替代阵容(array2)中的一个玩家替换它们。
一旦做出选择,阵列就会更新,阵列2中的选定数组项现在出现在数组1中,反之亦然。
伪代码示例:
首发阵容=鲍勃,苏珊,凯文,杰克,蒂姆 优势阵容=乔治,史蒂夫,玛莎
玩家分出:杰克
玩家分到:Martha
// JS Magic激活! (在此处插入您的巧妙代码。)
结果:
首发阵容:Bob,Susan,Kevin,Martha,Tim
替补阵容:乔治,史蒂夫,杰克
我找到了swap the order of two items in a single array, using a prototype method的优雅解决方案。但是,如果您处理两个不同数组中的两个项目,这将无效。
我的问题不是关于解决方案是否可行(当然是这样),而是最佳方式是什么,使用干净,精确和优雅的代码,而不需要对于一堆for-loop意大利面。
答案 0 :(得分:2)
不富有魅力,也许会错过你的情绪 - 但是你可以用两行来做到这一点
var Starting_Lineup = ["Bob", "Susan", "Kevin", "Jack", "Tim"];
var Substitute_Lineup = ["George", "Steve", "Martha"];
/*
Player to sub out: Jack
Player to sub in: Martha
*/
// JS Magic Activates! (Insert your ingenious code here.)
Starting_Lineup[Starting_Lineup.indexOf("Jack")]="Martha";
Substitute_Lineup[Substitute_Lineup.indexOf("Martha")]="Jack";
/*
Result:
Starting Lineup: Bob, Susan, Kevin, Martha, Tim
Substitute Lineup: George, Steve, Jack
*/
如果你想要一个功能:
var Starting_Lineup = ["Bob", "Susan", "Kevin", "Jack", "Tim"];
var Substitute_Lineup = ["George", "Steve", "Martha"];
/*
Player to sub out: Jack
Player to sub in: Martha
*/
[Starting_Lineup,Substitute_Lineup]=swap_player(Starting_Lineup,Substitute_Lineup,"Jack","Martha");
function swap_player(team_1,team_2,player_1,player_2){
team_1[team_1.indexOf(player_1)]=player_2;
team_2[team_2.indexOf(player_2)]=player_1;
return [team_1,team_2];
}
答案 1 :(得分:2)
您可以获取所需元素的索引并使用destructuring assignment。
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);

.as-console-wrapper { max-height: 100% !important; top: 0; }