Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Feb 2005

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!

Gaemer Addicted!

Trädvy Permalänk
Medlem
Plats
Umeå
Registrerad
Jul 2001

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.

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Feb 2005
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.

Gaemer Addicted!

Trädvy Permalänk
Medlem
Plats
SweClockers forum
Registrerad
Aug 2012
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.

Guide: Roota din HTC - BB-Kod-knappar på Prisjakt

              Min burk - Kvävekyld till 80%
8700K@stock
1070 Ti@stock

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

Trädvy Permalänk
Medlem
Plats
Umeå
Registrerad
Jul 2001

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.

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Nov 2010
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

Trädvy Permalänk
Medlem
Registrerad
Aug 2011

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; }