Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] Max z tablicy asocjacyjnej
Forum PHP.pl > Forum > Przedszkole
fiasko
Mam pytanie jak policzyć wartość maksymalną z takiej tablicy w javascript ?

zwykła tablica to wiem smile.gif
[JAVASCRIPT] pobierz, plaintext
  1.  
  2. var dane = new Array(23,45,67);
  3.  
  4. alert(Math.max.apply( Math, dane ));
[JAVASCRIPT] pobierz, plaintext

ale potrzebuję ustalić index klucza z najwyższą wartością z tej tablicy poniżej.

[JAVASCRIPT] pobierz, plaintext
  1.  
  2. var dane = new Array();
  3.  
  4. dane[0] = 5 ;
  5. dane[3] = 15 ;
  6. dane[2] = 45 ;
  7. dane[34] = 5 ;
  8. dane[5] = 15 ;
  9. dane[13] = 45 ;
[JAVASCRIPT] pobierz, plaintext






droslaw
Taka metoda zwróci pierwszy index pod, którym leży najwyższa wartość:
Kod
Array.prototype.maxItemKey = function()
{
    var value; // Największa wartość.
    var key; // Klucz majwiększej wartości.
    for(var x in this)
    {
        if(this.hasOwnProperty(x)) // Dzięki temu funckja nie będzie brała pod uwagę m.in. własności maxItemKey, która teraz należy do prototypu Array.
            if(key == undefined || this[x] > value)
            {
                value = this[x];
                key = x;
            }
    }
    return key;
}

efektem tego kodu:
Kod
var dane = [];
dane[0] = 5;
dane[3] = 15;
dane[2] = 45;
dane[34] = 5;
dane[5] = 15;
dane[13] = 45;
alert(dane.maxItemKey());

Będzie okienko z liczbą 2.
fiasko
Niestety ale ta biblioteka prototype mi się gryzie z moim kodem i z jquery sad.gif .

Potrzebuję rozwiązania w czystym JavaScript lub jquery.
kamil4u
To nie jest biblioteka prototype - tylko czysty JS:)

Poczytaj co robi prototype w tym kodzie. Niestety twórcy jednego z popularnych framework-ów, niefortunnie użyli tej nazwy i to myli początkujących programistów JS.
droslaw
Można też napisać zwykłą funkcję:
Kod
function maxValueKey(arr)
{
    var value; // Największa wartość.
    var key; // Klucz majwiększej wartości.
    for(var x in arr)
    {
        if(arr.hasOwnProperty(x))
            if(key == undefined || arr[x] > value)
            {
                value = arr[x];
                key = x;
            }
    }
    return key;
}


Poprzednia wersja jest o wiele wygodniejsza i byłoby lepiej gdyby można było ją zatosować. Masz jakieś komunikaty mówiące o tym w czym konkretnie przeszkadza metoda, którą podałem w pierwszym poście?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.