Frage

Lassen Sie uns sagen, ich habe dieses Array von Regisseuren:

var directors = ['Woody Allen', 'Woody Allen', 'Clint Eastwood', 'Quentin Tarantino', 'Robert Rodriguez', 'Woody Allen', 'Steven Soderberg', 'Robert Rodriguez, Quentin Tarantino' ];

Ein PHP print_r der aray würde wie folgt aussehen:

Array
(
    [0] => Woody Allen
    [1] => Woody Allen
    [2] => Clint Eastwood
    [3] => Quentin Tarantino
    [4] => Robert Rodriguez
    [5] => Woody Allen
    [6] => Steven Soderberg
    [7] => Robert Rodriguez, Quentin Tarantino
)

Was mag ich damit zu tun, ist eine Schleife durch das Array und erstellen Sie ein neues assoziatives Array mit dem Namen als Schlüssel und die Anzahl, wie oft es in dem Array als Wert angezeigt wird. Plus-Sortierung der Array nach Wert höchster zuerst, so dass das Endergebnis wie tihs wäre:

Array
(
    [Woody Allen] => 3
    [Robert Rodriguez] => 2
    [Quentin Tarantino] => 2
    [Steven Soderberg] => 1
    [Clint Eastwood] => 1
)

Ich bin kein Experte auf Javascript, aber wenn ich es in PHP tun möchte ich dies tun würde:

$directors = array();
foreach($dirs as $d){
    $pos = strpos($d,",");
    if($pos === false) {
        if($directors[$d]){
            $directors[$d] = $directors[$d]+1;
        }else{
            $directors[$d] = 1;
        }
    }else{
        $da = explode(",",$d);
        foreach($da as $d){
            $d = trim($d);
            if($directors[$d]){
                $directors[$d] = $directors[$d]+1;
            }else{
                $directors[$d] = 1;
            }
        }
    }
}
arsort($directors);

Versuchte viele Möglichkeiten, um die gleiche Sache in JavaScript zu tun, aber da assoziative Arrays existieren nicht in der gleichen Art und Weise in JS Ich habe som Probleme hatte, um es an die Arbeit. Mein bester Versuch war dieser Code, aber es nicht tun, was ich will:

function add2array(a,v){
    if(a[v] != null){
        a[v] = a[v]+1;
    }else{
        a[v] = 1;
    }
}

$.each(directors, function(k, v){
    if(v.indexOf(",") != -1){
        dirs = v.split(",");
        $.each(dirs, function(k, v){
            dtrim = $.trim(v);
            console.log(dtrim);
            add2array(r,dtrim);
        });

    }else{
        add2array(r,v);
    }

});

Dies macht ein großes JS-Objekt mit directorname als Schlüssel und zählt als Wert, sondern ist sie eine Möglichkeit für mich, das zu sortieren? oder muss ich ein Array von Objekten machen, das zu tun. Wäre wirklich hilfreich sein, wenn mir jemand dieses Problem lösen helfen könnte. Ich bin mit jQuery, wie Sie können sich so Ihre Lösung, dass zu können.

War es hilfreich?

Lösung 2

Ich löste es mir:

var r = {}, re = [];

function add2array(a,v){
    if(a[v] != null){
        a[v] = a[v]+1;
    }else{
        a[v] = 1;
    }
}

$.each(directors, function(k, v){
    if(v.indexOf(",") != -1){
        dirs = v.split(",");
        $.each(dirs, function(k, v){
            dtrim = $.trim(v);
            add2array(r,dtrim);
        });

    }else{
        add2array(r,v);
    }

});

for (var i in r) {
    re.push({ name : i, count : r[i] });
}


function compare(a,b) {
  if (a.count > b.count)
     return -1;
  if (a.count < b.count)
    return 1;
  return 0;
}

re.sort(compare);

es funktioniert super auf einer eigenständigen Seite, aber es muss ein Konflikt mit meinem anderen Skripten sein, weil ich es nicht verwenden kann, wo ich es brauche ...

Andere Tipps

assoziative Arrays haben keine Ordnung, so kann man nicht sortieren sie. Sie werden ein Array mit Schlüsseln machen müssen. Wert-Paare und dann sortiert auf der Eigenschaft des Elements

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top