gpt4 book ai didi

javascript - 如何通过嵌套对象属性对对象的已解析 JS 数据进行排序

转载 作者:行者123 更新时间:2023-11-30 18:30:29 25 4
gpt4 key购买 nike

我尝试通过使用嵌套对象属性(属性为“score”)按升序对数组中的对象进行排序。

数组;

[ {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 请求的数据的方式。

提前致谢,凸轮

最佳答案

你好吗?

我刚刚对此进行了测试,您可能需要修改一些内容。

首先,您使用的是提问者的“排序”解决方案,而不是实际解决方案,因此您首先需要重写您的 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);

您没有发送第一个强制参数,它实际上告诉函数您希望对象按哪个属性排序:在本例中为“score”。

因此,您必须像这样调用该函数:

var ordered_scores = order_top_scores('score',returnedData);

如果你想让它从高到低排序,像这样:

var ordered_scores = order_top_scores('score',returnedData,true);

第二

此外,请记住您输出的是“returnedData”值而不是 ordered_scores 值,因此如果这一行:

console.log(returnedData);

输出的是undefined,说明你的JSON数据不正确。为确保排序有效,您还应该像这样输出 ordered_scores:

console.log(ordered_scores);

如果有任何不清楚的地方,请告诉我。

干杯!

关于javascript - 如何通过嵌套对象属性对对象的已解析 JS 数据进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9785950/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com