PDA

Volledige versie bekijken : array - hoevaak komt item x voor?


Ruben!
%Europe/Berlin %556 %2008, 13:21
Ik heb:
var names:Array = new Array("piet", "jan", "kees", "piet", "kees", "piet");

Daar moet bij:
var nNames:Array = new Array(["piet",3], ["jan",1], ["kees",2]);

Oftewel, ik ben op zoek naar een functie die binnen een array telt hoe vaak een item uit de betreffende array voorkomt.

Ik dacht aan een for-loop die steeds checkt of een item uit de array 'names' al bestaat in de array 'nNames', en zoja nNames[x][1] verhoogt met 1. Maar in de praktijk lukt het me niet om dit zo te scripten, iemand die een duwtje in de goede richting kan geven?

Dauntless
%Europe/Berlin %560 %2008, 13:26
Je laat beter zien wat je dan al had, want de denkwijze is correct.

- maak nieuwe array aan
- doorloop array
- Vergelijk element met elementen in nieuwe array
- Komt het er in voor: verhoog counter met 1
- Komt het er nog niet in voor: voeg toe aan nieuwe array en zet waarde op 1

Ruben!
%Europe/Berlin %588 %2008, 14:07
let op de 'gekke stukjes'...

var nItems:Array = new Array();
var nArr:Number = 0;
function countItems(src:Array):Array
{
for(var i:Number = 0; i < src.length; i++)
{
if(src[i] != nItems[0 t/m nItems.length-1])
{
nItems[nArr] = new Array(src[i], 1);
nArr++;
}
else
{
...
}
}
return nItems;

}

Ruben!
%Europe/Berlin %602 %2008, 14:27
Dit was geen succes:


var names:Array = new Array("piet", "jan", "kees", "piet", "kees", "piet");

trace(count(names)); //piet,1,piet,1,piet,1

function count(src:Array):Array
{
//'maak nieuwe array aan'
var nItems:Array = new Array();
//'doorloop array'
for(var i:Number = 0; i < src.length; i++)
{
//'Vergelijk element met elementen in nieuwe array'
if(nItems.length != 0)
{
for(var j:Number = 0; j < nItems.length; j++)
{
//'Komt het er in voor: verhoog counter met 1'
if(src[i] == nItems[j][0])
{
nItems[j][1]++;
}
//'Komt het er nog niet in voor: voeg toe aan nieuwe array en zet waarde op 1'
else if(src[i] != nItems[j][0] && (i - 1) == nItems.length)
{
nItems.push(src[i], 1);
}
}
}
else
{
nItems.push(src[i], 1);
}
}
return nItems;
}

Dauntless
%Europe/Berlin %607 %2008, 14:34
function count(src:Array):Array
{
var nItems:Array = new Array();
for(var i:Number = 0; i < src.length; i++)
{
var success:Boolean = false;
for(var j:Number = 0; j<nItems.length; j++)
{
if(nItems[j][0] == src[i])
{
success = true;
nItems[j][1]++;
}
}

if(!success)
{
nItems.push(new Array(src[i], 1));
}
}
return nItems;
}
Bij jouw script voegt hij een item toe elke keer dat een item niet gelijk is aan een item uit de nItems array. Maar je moet achteraf pas kijken of het item gevonden was of niet.

Ruben!
%Europe/Berlin %609 %2008, 14:38
Oke, dankjewel, werkt nu:)