假设我有这样一组电影导演:
var directors = ['Woody Allen', 'Woody Allen', 'Clint Eastwood', 'Quentin Tarantino', 'Robert Rodriguez', 'Woody Allen', 'Steven Soderberg', 'Robert Rodriguez, Quentin Tarantino' ];aray的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
)我想要做的是循环遍历数组,并创建一个新的关联数组,名称为key,在数组中出现的次数为value。另外,首先对值最高的数组进行排序,因此最终结果将类似于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);
}
});这就产生了一个以directorname为key和count为value的大型JS对象,但是我有办法对其进行排序吗?或者我需要创建一个对象数组来做到这一点。如果有人能帮我解决这个问题就太好了。我正在使用jQuery,因为您可以使用它,所以您的解决方案可以使用它。
发布于 2010-11-05 04:55:01
我自己解决的:
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);它在一个独立的页面上工作得很好,但肯定与我的其他脚本有一些冲突,因为我不能在我需要它的地方使用它。
发布于 2010-11-01 01:53:48
关联数组没有顺序,因此无法对其进行排序。您必须创建一个包含key:value对的数组,然后对该项的属性进行排序。
https://stackoverflow.com/questions/4064217
复制相似问题