---
title: "Sortera en array"
type: "forum-thread"
url: "https://www.webforum.nu/amne/javascript/113530-sortera-en-array"
topic: "JavaScript"
topic_url: "https://www.webforum.nu/amne/javascript"
author: "Wickmark"
published: "2004-10-14T07:40:26.000Z"
updated: "2004-10-24T08:44:23.000Z"
replies: 18
views: 748
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/javascript/113530-sortera-en-array"
---

# Sortera en array

## #1 — Wickmark, 2004-10-14T07:40Z

Hej hej,
jag håller på med en liten ASP/JScript applikation som, genom att läsa en textfil, skriver upp en highscore-lista i ett mindre datorspel. ASP/Jscript skriver man ju med JScript kod, och all array-funktioner jag någonsin sett fungera i javascript, fungerar på samma gång i ASP/Javascript också, så det är anledningen till att jag postar här.

Datorspelet skriver ut poängen i följande format:
\[Poäng\];\[Namn\]

dvs. t ex:
400;Arne Johansson

Det jag gör sedan är att jag delar upp poängen i en array genom att dela upp dem i radbrytningarna!

```
arrWrite = sContent.split("\n");
```

Hur gör jag så att arrayen sorteras efter antal poäng?

Permalänk: https://www.webforum.nu/p/113530

## #2 — nitro2k01, 2004-10-14T07:50Z

*Denna kod innehåller fel som omnämns [här](http://www.webforum.nu/showthread.php?s=&postid=933389#post933389)!*

```
arrWrite = sContent.split("\n");
arrWrite = arrWrite.sort();

var hiScoreTable = [];

for (i=0; i<arrWrite.length; i++){
  hiScoreTable[i]=arrWrite[i].split();
}

// Skriv ut
document.write("<pre>");
for (i=hiScoreTable.length-1; i>-1; i--){
  document.writeln("Poäng: " + hiScoreTable[i][0] + "\tNamn: " + hiScoreTable[i][0]);
}
document.write("</pre>");
```

Permalänk: https://www.webforum.nu/p/1459347

## #3 — Erik Juhlin, 2004-10-14T08:00Z

nitro2k01: Om jag inte är helt fel ute så kommer din kod sätta 5;Pelle före 1000;Erik.

Permalänk: https://www.webforum.nu/p/1459353

## #4 — nitro2k01, 2004-10-14T08:05Z

Jo, men titta noga så ser du att den andra for-loopen läser array'en baklänges när poängen ska skrivas ut.

Permalänk: https://www.webforum.nu/p/1459357

## #5 — nitro2k01, 2004-10-14T08:14Z

Men man kan ju reversa arrayen också!

*Denna kod innehåller fel som omnämns [här](http://www.webforum.nu/showthread.php?s=&postid=933389#post933389)!*

```
 arrWrite = sContent.split("\n");
arrWrite = arrWrite.sort().reverse();

var hiScoreTable = [];

for (i=0; i<arrWrite.length; i++){
  hiScoreTable[i]=arrWrite[i].split();
}

// Skriv ut
document.write("<pre>");
for (i=0; i<hiScoreTable.length; i++){
  document.writeln("Poäng: " + hiScoreTable[i][0] + "\tNamn: " + hiScoreTable[i][0]);
}
document.write("</pre>");
```

Permalänk: https://www.webforum.nu/p/1459363

## #6 — RGB, 2004-10-14T12:56Z

Ett exempel på hur du kan sortera en array

```
<PRE>
<SCRIPT>
var a=["700;kalle","4300;kurt","800;korven","100;klas","10000;konny"];
a.sort(function(a,b){return(parseInt(b)-parseInt(a))});
var i = -1;var c;
while(i<a.length){ c=a[++i].split(";"); document.write("Score: "+c[0]+"\t\tBy: "+c[1]+"<br>");}
</SCRIPT>
</PRE>
```

Permalänk: https://www.webforum.nu/p/1459530

## #7 — Erik Juhlin, 2004-10-14T13:45Z

nitro2k01: Vad jag menade var att du gjorde en text-sortering vilket betyder att 5 är större än 1000.

RGB: Jo, att använda en egen sort-funktion är ju vettigt i det här fallet.
Javascripts parseInt är lite lustig som ignorerar bokstäver och annat som kommer efter siffrorna... :)

Permalänk: https://www.webforum.nu/p/1459547

## #8 — Erik Juhlin, 2004-10-14T14:00Z

Som RGBs fast lite tydligare skrivet och ASP anpassat...

```
<%
function numericSort(a, b)
{
	return parseInt(b) - parseInt(a);
}

var player = ["700;kalle", "4300;kurt", "800;korven", "100;klas", "10000;konny"];

player.sort(numericSort);

for (var i = 0; i < player.length; i++)
{
	var playerData = player[i].split(";");
	Response.Write("Score: " + playerData[0] + "\t\tBy: " + playerData[1] + "<br>");
}
%>
```

Permalänk: https://www.webforum.nu/p/1459553

## #9 — Wickmark, 2004-10-16T13:46Z

Nehe, något gick fel!

Kod:
arrWrite.sort(numericSort);

Fel:
Number expected

Innehåll i arrayen:
200;Affe Johansson, 2003;Arne Ålesson, 54000;Mästaren

Permalänk: https://www.webforum.nu/p/1460384

## #10 — Erik Juhlin, 2004-10-18T07:15Z

Kanske är så att parseInt blir sur för att det kommer bokstäver i strängen. Min kod funkade dock när jag körde den.

Bara för att testa, prova att ta bort numericSort och kom tillbaka.

Permalänk: https://www.webforum.nu/p/1461112

## #11 — Wickmark, 2004-10-18T08:25Z

> **Erik Juhlin skrev:**
>
> Kanske är så att parseInt blir sur för att det kommer bokstäver i strängen. Min kod funkade dock när jag körde den.
> 
> Bara för att testa, prova att ta bort numericSort och kom tillbaka.

 Fungerade inge bra :(

Bifogar hela koden!

```
<%@LANGUAGE="JAVASCRIPT" CODEPAGE="1252"%>
<!--#include virtual="/LWSWE/adojavas.inc"-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Po&auml;ngr&auml;knare</title>
<style type="text/css" media="all"> 
body, th, td, p, table {
  font-family: Arial, Verdana, Helvetica, sans-serif;
  font-size: 12px; 
  font-color: #000000;
}
</style>
</head>
<body>
<%
function numericSort(a, b){
	return b.parseInt - a.parseInt;
}
    var sChart   = new String(Server.MapPath("/LWSWE/_rubensoft_root/CAPPPoints/points.txt"));
    var oFSO     = new ActiveXObject("Scripting.FileSystemObject"),
        oFile    = oFSO.OpenTextFile(sChart, adModeRead),
        sContent = new String(oFile.ReadAll()), 
        arrWrite = new Array(),
        arrSub   = new Array();
           arrWrite = sContent.split("\n");       
        oFile.Close();
		
         arrWrite.sort(numericSort);
         
          for(var iX = 0; arrWrite.length > iX; iX++) {
            if(arrWrite[iX].length > 1) {
             arrSub = arrWrite[iX].split(";");
               Response.Write("<span style=\"font-weight:900; color:red; " +
                              "font-size:14px;\">" +
                              arrSub[0] + 
                              "</span><br />Spelare: " + 
                              arrSub[1] + 
                              "<hr noshade=\"noshade\" />");
            }
          }           
%>
</body>
</html>
```

Permalänk: https://www.webforum.nu/p/1461138

## #12 — Erik Juhlin, 2004-10-18T08:29Z

Vad fick du för fel när du tog bort numericSort?

Permalänk: https://www.webforum.nu/p/1461139

## #13 — nitro2k01, 2004-10-18T08:38Z

Jag tror det fixar sig om du gör så här:

```
arrWrite = sContent.split("\r\n");
if (arrWrite.length==0)
  arrWrite = sContent.split("\n");
```

 
Du kanske måste byta plats på \\r och \\n i första raden.

Permalänk: https://www.webforum.nu/p/1461144

## #14 — RGB, 2004-10-18T14:41Z

Du försöker hantera *parseInt* som en egenskap hos de värden du skickar till *numericSort*

```
function numericSort(a, b){
	return b.parseInt - a.parseInt;
}
```

Prova med

```
function numericSort(a, b){
try
{
	return parseInt(b) - parseInt(a);
}
catch(e)
{
	Response.write(e.description);
}
}
```

\[Edit\]18 oktober 2004 19:44\[/edit\]

Permalänk: https://www.webforum.nu/p/1461326

## #15 — Erik Juhlin, 2004-10-18T14:44Z

Oj, det missade jag helt. Sånt meckar man ju inte med! :p

RGB: Man måste skriva Response.Write eftersom att JavaScript är case-sensivite... :)

Permalänk: https://www.webforum.nu/p/1461328

## #16 — RGB, 2004-10-18T17:43Z

*Response.write* funkar det med :)

Permalänk: https://www.webforum.nu/p/1461451

## #17 — Erik Juhlin, 2004-10-19T06:08Z

Okej, objektet är case-sensitive. Men metoderna är inte det. :)

Permalänk: https://www.webforum.nu/p/1461678

## #18 — Wickmark, 2004-10-23T14:39Z

Okej, nu vet jag felet, men vet inte riktigt hur jag så smidigt som möjligt kan lösa det.Det som händer är helt enkelt att det läggs till en extra tom del i arrayen.... som sen skapar ett fel när man försöker sortera den.

Felbeskrivning:
<http://rubensoft.se/LWSWE/_rubensoft_root/CAPPPoints/>

Permalänk: https://www.webforum.nu/p/1467235

## #19 — Wickmark, 2004-10-24T08:44Z

**Har löst det nu!**
Fick lägga till följande kod:

```
		  if(String(arrWrite[arrWrite.length]) == "undefined")
		    arrWrite.length = arrWrite.length - 1;
		
		       try 
                         arrWrite.sort(numericSort);
		       catch(e) 
		         Response.Write(e.description);
```

Tack så mycket för er hjälp!

Permalänk: https://www.webforum.nu/p/1467493

---

Tråden på webben: https://www.webforum.nu/amne/javascript/113530-sortera-en-array
