javascript - 循环未正确更改元素位置
问题描述
我想自动化一个测试用例,我需要按项目的数值降序对项目进行排序。对于排序用户故事列表项可能会改变。在开始时,他们从头开始查看此值。我为此使用了哈希
var values = $$('div.vertical-list-container div.list-group-item');
var numberHash = { 'One': 1, 'Two': 2, 'Three': 3, 'Four': 4, 'Five': 5, 'Six': 6, 'Seven': 7, 'Eight': 8, 'Nine': 9, 'Ten': 10 };
在我创建了收集所有这些元素的循环之后。
for(var i=0;i<values.length;i++)
{
numberArray.push(numberHash[values[i].getText()])
}
所以现在循环看起来是这样 [1,2,3,4,5,6] 之后,我使用冒泡排序进行降序
function bubble_Sort(a)
{
var swapp;
var n = a.length-1;
var x=a;
do {
swapp = false;
for (var i=0; i < n; i++)
{
if (x[i] < x[i+1])
{
var temp = x[i];
x[i] = x[i+1];
x[i+1] = temp;
swapp = true;
}
}
n--;
} while (swapp);
return x;
}
bubble_Sort(numberArray);
在最后一个循环中,我遇到了问题。
for(var i = 0; i < values.length; i++){
var elem = values[i];
var elemNumber = numberHash[values[i].getText()];
var index = numberArray.findIndex((element) => element == elemNumber);
var target = values[index];
elem.dragAndDrop(target);
}
除 2 之外的所有值都更改了位置。我知道为什么会这样(因为在 .dragAndDrop 函数值 1 低于 6 之后,现在值 2 处于零位置,但循环开始检查下一个位置。所以现在我按此顺序排列了值 = >这个[6,2,5,4,3,1] 而不是 [6,5,4,3,2,1]。有人知道如何解决吗?循环中的问题在哪里?我真的需要对此:(
解决方案
自己解决
var moved = true
while(moved){
values = $$('div.vertical-list-container div.list-group-item');
moved = false
for(var i = 0; i < values.length; i++){
var elem = values[i];
var elemNumber = numberHash[values[i].getText()];
var index = numberArray.findIndex((element) => element == elemNumber);
if(i === index){continue}
var target = values[index];
elem.dragAndDrop(target);
moved = true;
}
现在循环正在正确更改值
推荐阅读
- ponylang - 如何在 Pony 中使用数组?
- java - 获取异常 java.sql.SQLException: ORA-03115: 不支持的网络数据类型或表示
- javascript - 如何在 express nodejs 上提取路由名称(路径)(在通话期间,来自 req)
- types - 相等的奇怪编译错误:(没有方法'equals(Any?):布尔'可用)
- macos - dotnet:在 Mac 中找不到命令
- google-app-engine - 设备 google-app-engine 上没有剩余空间
- sql - 使用最小日期获取另一列的最小日期和第一个文本
- gcc - Conda gcc 不会替换系统 gcc
- html - Bootstrap cols 不相邻
- html - 标签略低于文本输入