Javascript 覆盖array.prototype中的此值
我发现原生js排序函数有时会出错,所以我想实现自己的。假设我有以下几点:Javascript 覆盖array.prototype中的此值,javascript,arrays,sorting,prototype,this,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中返回什么,数组的顺序仍然
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”值/使其以正确的顺序指向数组如果您考虑上面给出的实际代码,则必须确保您的<代码>自定义排序函数更新<代码>此< /代码> ./P> 一种情况是,
customSort
仅将this
用作“只读”输入,即-仅将排序后的数组放入updated
,而不是更改this
。
在这种情况下,考虑到上面的代码(您可能已经使用该代码执行了测试),不会向函数发送updated
参数来接收排序后的值
另一种情况是customSort
返回已排序的数组,在这种情况下,您必须收集它:
array = array.customSort(function(a,b) {return a - b});
console.log(array);
我只是在
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;
})
}
我希望该函数的操作方式与本机array.sort函数完全相同-它覆盖提供的数组,而不是返回新的排序数组
我觉得奇怪的是,这是有效的。。。您不能在一次扫描中覆盖整个此
值,但可以逐步覆盖。我无法在customSort函数中执行此操作:
this = updated;
你说它搞砸了是什么意思<代码>[5,2,3,6].sort(函数(a,b){return a-b;})每次都工作得很好。我不是说在这种情况下它会出错。我发现了它排序不正确的实例。我试图给出一个非常简单的示例,说明我希望customSort函数返回什么。我想我很清楚这一点。你为什么不举一个失败的实际例子呢?因为我认为你在试图解决一个你不需要解决的问题。我认为您使用了
排序
错误。如果你提出了你在sort
中遇到的实际问题,我们可以解决这个问题,这样你就不必去搞原型了。这叫做XY问题。当你应该解X时,你却忙于解Y。