gpt4 book ai didi

javascript - 使用两种不同的排序条件对具有不完全相同的对象的对象数组进行排序

转载 作者:行者123 更新时间:2023-11-30 16:03:27 24 4
gpt4 key购买 nike

/*
I have two people
*/

var person_one= 'person_one';
var person_two= 'person_two';

/*
This is a response I get from a server
*/

var response = [
{"key":{"name":"person_one","kind":"attrA","path":["attrA","person_one"]},"data":{"q":"3","n":"0"}},
{"key":{"name":"person_one","kind":"attrB","parent":{"name":"person_two","kind":"attrA","path":["attrA","person_two"]},"path":["attrA","person_two","attrB","person_one"]},"data":{"some_data":"p"}},
{"key":{"name":"person_two","kind":"attrA","path":["attrA","person_two"]},"data":{"q":"1","n":"0"}}
];

/*
Sort the object array by the key.kind field. So all attrA will come first and then attraB
*/

function compare(a,b) {
if (a.key.kind < b.key.kind )
return -1;
else if (a.key.kind > b.key.kind)
return 1;
else
return 0;
}

response.sort(compare); //sort

console.log('Sorted response = ' + JSON.stringify(response) ); //print sorted response

这是我目前的代码。发生的事情是我从服务器收到响应:

[
{"key":{"name":"person_one","kind":"attrA","path":["attrA","person_one"]},"data":{"q":"3","n":"0"}},
{"key":{"name":"person_one","kind":"attrB","parent":{"name":"person_two","kind":"attrA","path":["attrA","person_two"]},"path":["attrA","person_two","attrB","person_one"]},"data":{"some_data":"p"}},
{"key":{"name":"person_two","kind":"attrA","path":["attrA","person_two"]},"data":{"q":"1","n":"0"}}
]

我现在需要使用以下两个条件对这个响应进行排序:

  • 第一个条件是按代码执行的 key.kind 属性对其进行排序。所有 attraA 都需要先显示,然后是 attraB

  • 第二个条件是在按 key.kind 排序后,需要按名称对其进行排序。所以 person_one 将始终出现在 person_two 之前(这些只是用来展示概念的假名,但实际名称可能像 jack 或 jill 等)。所以我可以按 key.kind 排序,但我不确定现在如何添加第二个排序条件并按它排序。如果这是 SQL,它会类似于这样的东西:SELECT * FROM table ORDER BY KIND,NAME; -- 先按种类排序,再按名称排序

最佳答案

假设您的服务器响应存储在数组 people 中。然后你可以使用 Array sort() method使用用户定义的比较函数:

people = people.sort(function(a, b) {
if (a.key.kind != b.key.kind) return a.key.kind > b.key.kind;
else return a.key.name > b.key.name;
});

关于javascript - 使用两种不同的排序条件对具有不完全相同的对象的对象数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37369178/

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