动态添加值和排序JavaScript对象
-
27-09-2019 - |
题
可以说我有此数组电影导演的:
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我有过SOM的问题得到它的工作,以同样的方式存在。我最好的尝试是这个代码,但它不会做我想做什么:
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,你可以这样本身您的解决方案可以用它来。
解决方案 2
我解决了它自己:
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);
它一个独立的页面上的伟大工程,但必须有与我的其他脚本冲突的一些原因,我需要它...
我不能用它其他提示
关联数组有没有订单,所以不能对其进行排序。你必须使包含数组键:值对,并然后进行排序的项目的属性
不隶属于 StackOverflow