可以說我有這個數組電影導演:動態地添加值和排序的JavaScript對象
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-對象與directorname關鍵和算作價值,但他們是任何方式對我來說,那種?或者我需要製作一組對象來做到這一點。如果有人能幫我解決這個問題,那真的很有幫助。我正在使用jQuery,因此您的解決方案可以使用它。
它總是在後端進行排序更好,我可以知道你爲什麼想在前端進行排序。如果你想在UI方面做,你應該使用一些豐富的UI接口,如dojo網格或jgrid等 – kobe 2010-10-31 17:48:39
這是一個web應用程序,運行在iphone上,所以沒有後端,它是所有的JS/HTML5/CSS3。 – Volmar 2010-10-31 18:06:46