gpt4 book ai didi

重新实现 Array.prototype.slice 的 JavaScript 难题未按预期工作

转载 作者:行者123 更新时间:2023-11-30 16:29:15 25 4
gpt4 key购买 nike

这不是工作面试,别担心:)

我很好奇为什么这两个函数返回不同:

var redundantSlice1 = function() {
return arguments[0].slice(Array.prototype.slice.call(arguments).slice(1).join())
};

var redundantSlice2 = function() {
return arguments[0].slice(1,2)
};

redundantSlice1([1,2,3], 1, 2) // [1,2,3]

redundantSlice2([1,2,3], 1, 2) // [2]

redundantSlice2 返回我所期望的,但是 1,2 是硬编码的,这是我试图避免的。

为什么第一个函数有我期望的 1,2 而不是 undefined

最佳答案

redundantSlice1中,.join()默认将参数转换为以,为分隔符的字符串。所以对于你的样本,声明

Array.prototype.slice.call( arguments ).slice( 1 ).join( )

实际上 "1,2" 不是您期望的 [ 1, 2 ]

除此之外,您只需将一个参数传递给 .slice( )。为了匹配 redundantSlice2 的行为,您必须使用 .apply( ) .

var redundantSlice1 = function() {
var firstArg = arguments[ 0 ];

return Array.prototype.slice.apply(
firstArg,
Array.prototype.slice.call( arguments, 1 )
);
};

关于重新实现 Array.prototype.slice 的 JavaScript 难题未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33589925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com