nic*_*ckb 1 javascript sorting overriding overloading
这个问题仍然没有在10月31日星期一得到纠正 (人们错误地回答它,好像我要求修改array.sort但我不是要求)
如何使用radix-msd algorthim 覆盖单个数组(而不是Array.sort)的内置JavaScript排序方法?
我有基数msd排序的算法,它是
// radix most-significant-bit sort for integers
//arr: array to be sorted
//begin: 0
//end: length of array
//bit: maximum number of bits required to represent numbers in arr
function radixsort (arr, begin, end, bit) {
var i, j, mask;
i = begin;
j = end;
mask = 1 << bit;
while(i < j) {
while(i < j && !(arr[i] & mask)) {
++i;
}
while(i < j && (arr[j - 1] & mask)) {
--j;
}
if(i < j) {
j--;
var tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
i++;
}
}
if(bit && i > begin) {
radixsort(arr, begin, i, bit - 1); // <=== RECURSIVE FUNCTION
}
if(bit && i < end) {
radixsort(arr, i, end, bit - 1); // <=== RECURSIVE FUNCTION
}
}
Run Code Online (Sandbox Code Playgroud)
我的JavaScript对象数组是:
homes[0].price;
homes[0].address;
homes[0].city;
homes[0].state;
homes[0].zip;
Run Code Online (Sandbox Code Playgroud)
因此,当我调用" homes.sort()"时 - 我希望它homes[x]根据price使用radix sort上面的数组对整个数组进行排序.我怎么做?
您不需要覆盖该sort函数,只需将比较器函数sort作为参数传递给方法即可.
该参数的函数签名是function (a, b)其中a为被比较的项目b.
如果需要不同的sort实现,请将其设置为不同的函数,而不是覆盖默认行为.您可以使用以下命令对所有阵列执
Array.prototype.radixsort = function ( ...params... )
Run Code Online (Sandbox Code Playgroud)
这将允许你打电话
[1,2,3].radixsort(...params...);
Run Code Online (Sandbox Code Playgroud)
或者,您可以将实用程序功能添加到Array:
Array.radixsort = function ( ...params... )
Run Code Online (Sandbox Code Playgroud)
这将被称为:
Array.radixsort([1,2,3], ...params...);
Run Code Online (Sandbox Code Playgroud)