Javascript中shift()和unshift()的助记符是什么?

29

我很难记住Array.shift()Array.unshift()的作用。

几年过去了,当我需要使用它们之一时,我仍然不得不时不时地查阅参考资料。有人能解释一下为什么选择了这些名称以及如何记忆哪个函数执行哪个操作吗?

对于Array.push()Array.pop()我没有这样的问题。


40
如果你在 shift / unshift 中将字母 "f" 想象成不存在的,那么很容易记住它们的含义:shift 是删除元素,而 unshift 是添加元素 :) - Vicky Chijwani
2
@VickyChijwani 我会把你的评论标记为搞笑的 :D - Filip Savic
1
毫无疑问,@VickyChijwani的评论是如何记住他们所做的最好的答案。 - Eric Majerus
2
只需记住,“Shift”比“Unshift”短,而且“Shift”也会使数组变短。我认为记住的问题不在于它是从前面还是后面添加,而是哪个会从前面添加/删除。 - Alex L
最容易记住它们的区别的方法是:较长的单词(push、unshift)会让数组变长,而较短的单词(pop、shift)则会让它变短。 - Giregar
显示剩余2条评论
5个回答

22

据我所知。

Shift命令来自于二进制位移[1]。例如。

    001100
0 < 011000 // when you shift left
|
Yay!

我觉得这很简单,就像你从后面推它一样。这对我来说很有道理。

unshift 是 shift 的相反方式。

    001100
1 > 001100 // they called it unshift
    1001100
    |
    Yay!

就是这样,希望这有所帮助!

[1] http://en.wikipedia.org/wiki/Bitwise_operation#Bit_shifts


那就是问题所在!因为我可以把它想象成移动:001100 < 1 = 0011001,而取消移动则是:001100 -> = 00110 + 0。所以问题是如何记住方向?Push/pop很容易理解,push代表进入,pop代表退出。 - exebook
@Chokchai- 不是一个好的比喻。Shift 移除数组的第一个成员并将其返回,Unshift 将提供的参数按顺序添加到数组的开头并返回新的数组长度。 - RobG
3
@exebook —— 没有简单的记忆方法,只需记住在规范中找到它的位置,在怀疑时查阅即可。 - RobG
这是一个很好的解释。就我个人而言,我更喜欢使用入队和出队操作。 - Armstrongest
@RobG,这不是比喻,这实际上就是名称的来源(楼主问“为什么选择这些名称”的原因)。 - s-ol

9

a.push(e)e推入a末尾

e = a.pop()a末尾弹出e

a.unshift(e)e加入到a开头,相当于队列的入队操作。

e = a.shift() 获取a开头元素到e,相当于队列的出队操作。

使用 pushpop 来实现堆栈。

使用 unshiftpop 来实现队列。(或者使用pushshift)

我记得 shift (具有破坏性) 和 unshift (具有构造性) 的差别只需要记住我使用 un-shift 来进行 en-queueing 操作,并且 shift 是与 unshift 相反的操作。


2
是的,我知道它们各自的功能...但明天我会忘记哪个做什么。我已经尝试了很多次! - exebook
@exebook 抱歉,看到编辑了。 - azz

9

想一想你的键盘:

Shift 按键可以让你输入第一个按键的大写字母。

.shift() 可以从数组中提取第一个元素。


这对我来说非常简单。 - Sethen

4

这绝对是最令人困惑的一对函数名称。唯一能提供的帮助是记住以下两点之一:

  • 可以将Shift视为“移动某物”,也许您可以想象,如果您多次“移动”一个数组,则可能会有些东西从末尾(或在这种情况下是开头)掉落。Unshift将事物恢复到原来的状态。
  • 与其听起来应该是相反的。`Unshift`听起来像是撤销某些操作,但实际上,它是将某些东西放入数组中。

祝你好运!


4

如何呢:

SHIFTer 将漂移变成了滑行

它将第一个元素返回给变量。

而 -

UNSHIFTer 是一个悄悄插队的小人

将参数作为第一个条目插入数组中

哦,这里有一些深层心理学技巧!!但是说真的,你会因为它的独特性而记得它 :-)


1
在所有的答案中,我实际上最喜欢这个。Push/Pop 很容易记,我只需要记住“shifter makes a drifter”,因为它让你留下了一些漂浮在数组外面的东西。 - Owen Allen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接