我有一张桌子,我想用一个字段对它进行排序。但是,我需要携带另一个字段,它将提供交换表条目所需的数据。它可以工作,但是当我们排序的字段的值为10时(这可能是条目> = 10的问题),它将10解释为1,从而对数据集的结果进行排序10 8 5 9到9 8 5 10。 我无法弄清楚发生了什么!你能? :)
解决方案(由Vache提供) 问题是要排序的数组条目是字符串而不是整数!我用jQuery和.text()收集数组的条目。另外我需要使用parseInt()将字符串转换为整数。
/**
* Will swap two table entries
* @param a - name of first player
* @param b - name of second player
*/
function swapEntries(a, b)
{
var editor = $("#" + a); //put your ids here
var viewer = $("#" + b);
editorContent = editor.clone();
viewerContent = viewer.clone();
editor.replaceWith(viewerContent);
viewer.replaceWith(editorContent);
}
/**
* Will swap two array cells
* @param ar - array
* @param a - first cell's index
* @param b - second cell's index
*/
function swap(ar, a, b)
{
var temp = ar[a];
ar[a] = ar[b];
ar[b] = temp;
}
/**
* Quicksort.
* @param a - The array to be sorted.
* @param first - The start of the sequence to be sorted.
* @param last - The end of the sequence to be sorted.
* @param names - Array of names.
*/
function quickSort( a, first, last, names )
{
var pivotElement;
if(first < last)
{
pivotElement = pivot(a, first, last, names);
quickSort(a, first, pivotElement-1, names);
quickSort(a, pivotElement+1, last, names);
}
}
/**
* Find and return the index of pivot element.
* @param a - The array.
* @param first - The start of the sequence.
* @param last - The end of the sequence.
* @param names - Array of names.
* @return - the pivot element.
*/
function pivot( a, first, last)
{
var p = first;
var pivotElement = a[first];
for(var i = first+1 ; i <= last ; i++)
{
if(a[i] > pivotElement)
{
p++;
swap(a, i, p);
swapEntries(names[i], names[p]);
swap(names, i, p);
}
}
swap(a, p, first);
swapEntries(names[p], names[first]);
swap(names, p, first);
return p;
}
答案 0 :(得分:2)
没有看到数组,你的问题可能就是你的数字实际上是字符串。
使用JavaScript处理排序方式
>>> "10" > "2"
false
>>> 10 > 2
true
另外值得注意的是,只要您的某个操作数是数字,就会进行转换以进行数字比较。所以,
>>> "10" > 2
true
>>> 10 > "2"
true