Permalänk
Medlem

Javascript array hantering

Hej!

Håller på som hobby lära sig lite mer javascript. Läser en bok som just nu snackar om arrays och hantera dem.

Skall skriva en function som reverse en array utan att använda reverse.

function reverseArrayInPlace(array) { for (var i = 0; i < Math.floor(array.length / 2); i++) { var old = array[i]; array[i] = array[array.length - 1 - i]; array[array.length - 1 - i] = old; } return array; }

Försökt förstå mig vad som händer här, kan någon snäll själ beskriva hur detta får [1,2,3,4,5] att bli [5,4,3,2,1]

Tack!

Visa signatur

Gaemer Addicted!

Permalänk
Medlem

Kan du inte bara läsa in den i en annan array och sen skriva tillbaka det i omvänd ordning? Känns ju som en superlätt sak.

Permalänk
Medlem
Skrivet av Semjonov:

Kan du inte bara läsa in den i en annan array och sen skriva tillbaka det i omvänd ordning? Känns ju som en superlätt sak.

Poängen är att man skall reverse den inom samma array. Och detta är lösningen till problemet. Men det gör mig inte klokare alls.

Visa signatur

Gaemer Addicted!

Permalänk
Medlem
Skrivet av we_man1:

Poängen är att man skall reverse den inom samma array. Och detta är lösningen till problemet. Men det gör mig inte klokare alls.

Din loop byter plats på första och sista elementet, därefter näst första och näst sista och fortsätter tills den kommer till mitten av listan.

Visa signatur

Spela Swemantle! Du vet att du vill.

Ibland har jag fel, men då är det någon annans fel.

Permalänk
Medlem

Kommer du ihåg att en arrays börjae på noll, orkar inte kika på koden nu. Men fundera ett par minuter till så löser det sig nog.

Permalänk
Medlem
Skrivet av we_man1:

Hej!

Håller på som hobby lära sig lite mer javascript. Läser en bok som just nu snackar om arrays och hantera dem.

Skall skriva en function som reverse en array utan att använda reverse.

function reverseArrayInPlace(array) { for (var i = 0; i < Math.floor(array.length / 2); i++) { var old = array[i]; array[i] = array[array.length - 1 - i]; array[array.length - 1 - i] = old; } return array; }

Försökt förstå mig vad som händer här, kan någon snäll själ beskriva hur detta får [1,2,3,4,5] att bli [5,4,3,2,1]

Tack!

Svårt att förklara helt pedagogiskt :-/ Gör ett försök:

-Den tar det första elementet i arrayen och sparar undan i variabeln old.
-Sen tar den det sista elemetet i arrayen och skriver över det första elementet med det.
-Sen skriver den över det sista elementet i arrayen med det undansparade värdet i old-variabeln (som förut var först).

Varje iteration förändrar arrayen såhär:
12345
52341
54321

Permalänk
Medlem

function reverseArray (array) { var newArray = [], len = array.length; for (var i = len - 1; i >= 0; i--) { newArray.push(array[i]); } return newArray; }

Så?

edit: läste resterade inlägg, man ska tydligen försvåra för sig själv

Då tycker jag detta ser vettigt ut:

function reverseArray (array) { var len = array.length; for (var i = 0; i < len; i++) { array.splice(i, 0, array.pop()); } return array; }