通过对比拖拽前后两个数组中各元素的前后邻居关系,可精准定位被移动的元素;若相邻两元素互换位置,则任选其一作为结果即可。
在实现拖拽排序(如使用 HTML5 Drag & Drop 或第三方库如 Sortable.js)时,一个常见需求是:仅知道拖拽前后的数组状态,如何准确识别出哪个元素被主动拖动并插入到了新位置? 关键在于:单次拖拽仅移动一个元素,其余元素相对顺序保持不变——这意味着,被移动元素的“邻居关系”会发生显著变化,而其他元素的邻居(至少一侧)通常得以保留。
核心思路:基于邻居一致性判断
每个元素在数组中的位置决定了它的前驱(prev)和后继(next)。若某元素未被移动,那么它在新旧数组中至少有一个邻居(前或后)应保持一致(边界情况需特殊处理,如首尾元素);而被拖动的元素,其前后邻居几乎必然全部改变。
以下是一个健壮、可直接复用的实现方案: