2013-10-01 5 views
15

J'ai du mal à me souvenir de ce que font Array.shift() et Array.unshift().Javascript shift() unshift() mnémoniques?

Après quelques années, j'ai encore trop de consulter la référence de temps en temps quand j'ai besoin d'utiliser l'un d'entre eux. Quelqu'un peut-il expliquer pourquoi ces noms sont choisis et comment mémoriser lequel fait quoi?

J'ai pas de problème avec Array.push() et Array.pop()

+10

Facile à retenir si vous laissez tomber mentalement le « f » en quart de travail/unshift: 'shift' _removes_ éléments et' unshift' _adds_ les :) –

+0

@VickyChijwani Je l'accepterais comme une réponse – exebook

+0

@VickyChijwani Je flag Votre commentaire aussi hilarant: D –

Répondre

1

C'est certainement la paire de noms de fonctions la plus confuse.Le seul salut que je peux offrir est de se rappeler l'une des deux choses suivantes:

  • Shift peut être considéré comme « déplacer quelque chose autour, » et vous pouvez peut-être imaginer que si vous « shift » un tableau autour d'un groupe , quelque chose est susceptible de tomber de la fin (ou dans ce cas, le début). Unshift remet les choses comme elles étaient.
  • C'est le contraire de ce que cela devrait être. unshift sonne comme défaire quelque chose, mais en fait, il met quelque chose sur le tableau.

Bonne chance!

14

Comme je l'ai connu.

La commande de décalage provient du décalage binaire binaire [1]. par exemple.

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

Je pense que c'est assez simple, c'est comme si vous le poussiez par derrière. Donc, cela a un sens pour moi.

Le décalage vers l'arrière est le contraire du décalage.

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

Voilà, ça vous aide!

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

+0

Voilà donc le problème! Parce que je peux penser comme décalage: 001100 <1 = 0011001, et unshift: 001100 -> = 00110 + 0. Donc, la question est de savoir comment mémoriser la direction? Le push/pop est facile, le push va, le pop sort. – exebook

+0

@ Chokchai-Pas une bonne analogie. Shift supprime le premier membre du tableau et le renvoie, unshift ajoute les arguments fournis au début d'un tableau dans l'ordre où ils sont présentés et renvoie la nouvelle longueur du tableau. – RobG

+3

@ exebook-il n'y a pas de moyen simple de s'en souvenir, il suffit de se rappeler où le trouver dans la spécification et le chercher en cas de doute. – RobG

5

a.push(e)poussee sur l'extrémité de a.

e = a.pop()POP l'élément dernier de a, à e.

a.unshift(e)enqueuese au début de a.

e = a.shift()obtient lepremier élémenta-e.

Utilisez push et pop pour les piles.

Utilisez unshift et pop pour les files d'attente. (Ou push et shift)

Je me souviens la différence entre shift (destructrice) et unshift (constructive) simplement en se souvenant que j'utilise un -shift pour en -queueing et shift est à l'opposé de unshift.

+1

Oui, je sais ce qu'ils font ... Mais demain, je vais oublier lequel fait quoi. J'ai essayé plusieurs fois! – exebook

+0

@exebook Excuses, voir modifier. – azz

4

Que diriez-vous:

Shifter fait un Drifter

Il retourne la première entrée à la variable.

et -

UNSHIFTer est un weenier qui se faufile dans la ligne

arguments Inserts comme première entrée dans le tableau

Oh, il existe des techniques psychologiques profondes au travail ici !! : -o Mais sérieusement, vous vous souviendrez pour sa particularité :-)

+1

De toutes les réponses, j'aime vraiment mieux.Push/Pop est facile, et je peux juste me rappeler que "shifter fait un drifter" puisqu'il vous laisse avec quelque chose qui sort de la rangée. – Nucleon

3

Il suffit de penser de votre clavier:

Majobtient une version capitale du première clé vous presse.

.shift()obtient le premier élément hors du tableau.

+0

C'est assez simple pour moi. – Sethen