Javascript 需要了解mergeSort和apply()的帮助
我是js新手,我试图理解这里如何使用Javascript 需要了解mergeSort和apply()的帮助,javascript,apply,Javascript,Apply,我是js新手,我试图理解这里如何使用apply(最近我一直在努力理解apply)。然而,我的问题是双重的。虽然我了解mergesort的概述,但我不知道最后一块中发生了什么 function mergeSort(items){ if (items.length < 2) { return items; } var middle = Math.floor(items.length / 2), left = items.slice(0,
apply
(最近我一直在努力理解apply
)。然而,我的问题是双重的。虽然我了解mergesort的概述,但我不知道最后一块中发生了什么
function mergeSort(items){
if (items.length < 2) {
return items;
}
var middle = Math.floor(items.length / 2),
left = items.slice(0, middle),
right = items.slice(middle),
params = merge(mergeSort(left), mergeSort(right));
// Add the arguments to replace everything between 0 and last item in the array
params.unshift(0, items.length);
items.splice.apply(items, params);
return items;
}
函数合并排序(项目){
如果(项目长度<2){
退货项目;
}
var middle=数学楼层(项目长度/2),
左=项目。切片(0,中间),
右=项目。切片(中间),
参数=合并(合并排序(左),合并排序(右));
//添加参数以替换数组中0和最后一项之间的所有内容
参数取消移位(0,项目长度);
项目.拼接.应用(项目,参数);
退货项目;
}
应用
几乎与调用
相同
如果您理解call
,apply
只是call
,但第二个参数是一个参数数组。例如,它们是相同的:
function.call(object, arg1, arg2, ...)
function.apply(object, [arg1, arg2, ...])
我不知道你在最后一个街区不明白什么。但我假设这部分是items.splice.apply(items,params)代码>
这里有一个故障。在js中,函数只是对象。对象可以有函数(或实例方法,就像在许多其他OO语言中一样)
当您执行
项目.splice
时,您所做的只是将手伸入项目
,然后将splice
功能拉出(作为对象)。然后使用apply
调用它。apply
的第一个参数是您在其上调用的对象。在您的示例中,括号中的项是调用splice
函数的项,params
是一个参数数组。在这种情况下,调用splice时,params中的值将用作参数。如果有3名成员,电话号码为:
items.splice(params[0], params[1], params[2]);
但是由于事先不知道会有多少成员,因此调用应该是什么样子,apply允许将参数作为数组传递。现在,您不需要知道有多少:
items.splice.apply(items, params);
因此,这一呼吁实际上是:
items.splice(params[0], params[1], params[2], ..., params[n]);
apply还允许对此进行设置,因为它应该是items,所以它作为第一个参数传递。其中是merge
?不看它吐出什么,很难解释。毫无疑问,这是一个拼接信号,但是怎么做呢?