如何覆盖JavaScript数组排序方法?

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上面的数组对整个数组进行排序.我怎么做?

zzz*_*Bov 5

您不需要覆盖该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)