Допустим, у меня есть этот массив режиссеров:
var directors = ['Woody Allen', 'Woody Allen', 'Clint Eastwood', 'Quentin Tarantino', 'Robert Rodriguez', 'Woody Allen', 'Steven Soderberg', 'Robert Rodriguez, Quentin Tarantino' ];
PHP print_r массива будет выглядеть так:
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
)
Что я хотел бы сделать с нимэто цикл по массиву и создание нового ассоциативного массива с именем в качестве ключа и количеством раз, которое он появляется в массиве в качестве значения.Плюс сначала отсортируйте массив по значению по величине, чтобы конечный результат был похож на tihs:
Array
(
[Woody Allen] => 3
[Robert Rodriguez] => 2
[Quentin Tarantino] => 2
[Steven Soderberg] => 1
[Clint Eastwood] => 1
)
Я не специалист по javascript, но если бы я делал это на PHP, я бы сделал так:
$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, но поскольку в JS ассоциативные массивы не существуют одинаково, у меня возникли некоторые проблемы, чтобы заставить его работать.Моя лучшая попытка была в этом коде, но он не делает то, что я хочу:
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);
}
});
Это делает один большой JS-объект с директором в качестве ключа и считается как значение, но это их любой способ для менясортировать что?или мне нужно сделать массив объектов, чтобы сделать это.Было бы очень полезно, если бы кто-нибудь мог помочь мне решить это.Я использую jQuery как вы можете, чтобы ваше решение могло использовать это для.