Dynamicly değerler eklemek ve sıralama Javascript Nesnesi

0 Cevap php

I film yönetmenlerinden bu dizi var diyelim:

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

Aray bir PHP print_r bu gibi görünecektir:

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
)

Ne ben onunla yapmak istiyorum dizi döngü olduğunu ve anahtarının ve değer olarak dizide görünen kez sayı olarak adla yeni bir ilişkisel dizi oluşturun. Sonuçta çalıştırılarak gibi olacağını, böylece artı, ilk önce en yüksek değerden sonra diziyi sıralamak:

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

Ben javascript hiçbir uzman değilim, ama PHP bunu olsaydı ben böyle yapardı:

$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);

JavaScript aynı şeyi yapmak için birçok yolu denedim ama birleşmeli diziler ben işe almak için som sorunları yaşadım JS aynı şekilde var yok çünkü. Benim en iyi denemeydi bu kod oldu, ama ben istiyorum ne yapmaz:

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

});

Bu anahtar ve değer olarak saymak gibi directorname ile büyük bir JS-nesne yapar, ama bana o sıralamak için onların herhangi bir yoldur? ya da ben bunu nesnelerin bir dizi yapmak gerekiyor. Herkes bana bu çözmeye yardımcı olabilir eğer gerçekten yararlı olacaktır. Se böylece çözüm olduğunu için kullanabileceğiniz gibi jQuery kullanıyorum.

0 Cevap