覆盖array.prototype中的this值

时间:2015-12-29 01:52:46

标签: javascript arrays sorting prototype this

我发现本机js排序功能不时搞砸了,所以我想实现自己的。假设我有以下内容:

Array.prototype.customSort = function(sortFunction, updated) {...}
var array = [5, 2, 3, 6]
array.customSort(function(a,b) {return a - b})
console.log(array)

数组应为[2,3,5,6]

已更新已排序的数组。

无论我在customSort中返回什么,数组的顺序仍然是原始顺序。如何覆盖'this'值/使其指向具有正确顺序的数组?

2 个答案:

答案 0 :(得分:0)

如果您考虑上面给出的实际代码,则必须确保customSort功能更新this

一个案例是customSort仅使用this作为"只读"输入,即 - 仅将排序后的数组放在updated中,而不是更改this。 在这种情况下,考虑到上面的代码(您可能已执行过测试),不会向函数发送updated参数,以接收已排序的值。

另一种情况是customSort返回已排序的数组,在这种情况下你必须收集它:

array = array.customSort(function(a,b) {return a - b});
console.log(array);

答案 1 :(得分:0)

我最后迭代了updated数组并将this中的每个值替换为updated中的值。在代码中,看起来像......

function customSort(cb) {
    ...//updated is the sorted array that has been built
    var that = this;
    _.each(updated, function (ele, index) {
        that[index] = ele;
    })
}

我希望函数的运行方式与native array.sort函数完全相同 - 它会覆盖提供的数组,而不是返回一个新的排序数组。

我觉得奇怪的是它有效......你不能在一次干净扫描中覆盖整个this值,但你可以分步进行。我无法在customSort函数中执行此操作:

this = updated;