我尝试通过使用嵌套对象属性(属性为“得分”)以数字的形式按数字顺序对对象进行排序。
数组;
[ {name:'dan', score:220},
{name:'lucy', score:876},
{name:'mike', score:211} ]
我找到了以下主题,但还是设法让它运转起来。
How to sort a JavaScript array of objects by nested object property?
控制台输出未定义。
function order_top_scores(prop, arr) {
arr.sort(function (a, b) {
if (a[prop] < b[prop]) {
return -1;
} else if (a[prop] > b[prop]) {
return 1;
} else {
return 0;
}
});
};
function get_results(){
$.get(wp_theme_dir+'/dottodot.php',
function(data){
var returnedData = $.parseJSON(data);
var ordered_scores = order_top_scores(returnedData)
console.log(returnedData);
});
}
我的数组略有不同,它可能是破坏排序的第二个属性吗? 或者也许我正在处理来自ajax请求的数据。
提前谢谢, 凸轮答案 0 :(得分:2)
我刚试过这个,你可能想要修改一些东西。
首先,您使用的是来自提问者的“排序”解决方案,而不是实际解决方案,因此您首先需要重写order_top_scores,如下所示:
var order_top_scores = function (prop, arr,reverse) {
if(!reverse) reverse = 0;
prop = prop.split('.');
var len = prop.length;
arr.sort(function (a, b) {
var i = 0;
while( i < len ) { a = a[prop[i]]; b = b[prop[i]]; i++; }
if (a < b) {
return -1;
} else if (a > b) {
return 1;
} else {
return 0;
}
});
if(reverse){arr.reverse()};
return arr;
};
分析这个函数,我添加了第三个“反向”参数,它要求true或false(因为原始解决方案从最低到最高命令它,在这种情况下你想要相反)
既然您已经拥有此功能,那么您需要记住两件事:
<强>第一强>
在这一行:
var ordered_scores = order_top_scores(returnedData);
您没有发送第一个必需参数,它实际上告诉函数您希望对象排序的属性:在这种情况下,“得分”。
所以,你必须像这样调用函数:
var ordered_scores = order_top_scores('score',returnedData);
如果你想让它从高到低排序,就像这样:
var ordered_scores = order_top_scores('score',returnedData,true);
<强>第二强>
另外,请记住,您输出的是“returnedData”值而不是ordered_scores值,所以如果这行:
console.log(returnedData);
输出未定义,表示您的JSON数据不正确。为确保排序有效,您还应该输出ordered_scores,如下所示:
console.log(ordered_scores);
如果有任何不清楚的地方,请告诉我。
干杯!
答案 1 :(得分:0)
我不确定这是正确的代码:
var returnedData = $.parseJSON(data);
var ordered_scores = order_top_scores(returnedData)
order_top_scores
和方法调用中的以下更改可能会正常,如果您在问题中提到returnedData
是数组:
function get_results(){
$.get(wp_theme_dir+'/dottodot.php',
function(data){
var returnedData = $.parseJSON(data);
var ordered_scores = order_top_scores("score", returnedData);
console.log(returnedData);
});
}
function order_top_scores(prop, arr) {
arr.sort(function (a, b) {
if (a[prop] < b[prop]) {
return -1;
} else if (a[prop] > b[prop]) {
return 1;
} else {
return 0;
}
});
}
您可以在控制台
中查看输出here