javascript - 交换一个数组元素并移动其余元素
问题描述
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 个循环。到目前为止,我想出了上述解决方案。if
并else if
具有相同的代码,但for block
. 交换后,数组将根据索引向右或向左移动。
解决方案
您可以拿走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));
推荐阅读
- excel - 在所有工作表中应用格式边框更改但一个不起作用?
- r - 过滤多个时间范围的多个特定列
- field - Acumatica 定制:将 PO Nbr 列添加到 SO 行
- c++ - 如何使用 C++ OpenGL Glut 显示两种形状而不是一种?
- windows - CreateToolhelp32Snapshot中使用的th32ProcessID是句柄吗
- javascript - Discord.js 在嵌入时按下反应时创建票证不起作用
- elixir - 如何在 Elixir 中声明全局常量?
- android - 是否可以将动画持续时间的一部分分配给要动画的特定值?
- python - 为什么 str(random.choice()) 返回 /string/
- html - 无法使用 bs4 提取表