我有这样的对象数组
[
{
"contact_id":"ee76f661-91ff-5e6b-b900-79612065a840",
"contact_name":"Bcd",
"favorite":false,
},
{
"contact_id":"da34621a-1355-5b6b-8ef5-e3bb60b2c28c",
"contact_name":"Def",
"favorite":true,
},
{
"contact_id":"0900bd96-319b-577b-8d01-975347667108",
"contact_name":"Abcd",
"favorite":false,
},
{
"contact_id":"0900bd96-319b-577b-8d01-975347667108",
"contact_name":"Abcde",
"favorite":true,
}
]
我想按照contact_name
的字母顺序对对象进行排序,而那些favorite
为true的对象也应该从头开始。因此,在这种情况下,这就是排序后的数组的样子:[
{
"contact_id":"0900bd96-319b-577b-8d01-975347667108",
"contact_name":"Abcde",
"favorite":true,
},
{
"contact_id":"da34621a-1355-5b6b-8ef5-e3bb60b2c28c",
"contact_name":"Def",
"favorite":true,
},
{
"contact_id":"0900bd96-319b-577b-8d01-975347667108",
"contact_name":"Abcd",
"favorite":false,
},
{
"contact_id":"ee76f661-91ff-5e6b-b900-79612065a840",
"contact_name":"Bcd",
"favorite":false,
},
]
现在,这是我用于排序的代码,由于我认为此方法是错误的,因此无法提供所需的结果sortContacts(contacts) {
contacts.sort((a, b) {
return a['contact_name']
.toString()
.toLowerCase()
.compareTo(b['contact_name'].toString().toLowerCase());
});
contacts.sort((a, b) {
bool favorite1 = a['favorite'];
bool favorite2 = b['favorite'];
return (favorite1 == favorite2) ? 0 : favorite1 ? -1 : 1;
});
return contacts;
}
我有点坚持,任何帮助都会很棒!谢谢你的时间!
最佳答案
像这样的事情应该做的工作:
void main() {
final contacts = [
{
"contact_id": "ee76f661-91ff-5e6b-b900-79612065a840",
"contact_name": "Bcd",
"favorite": false,
},
{
"contact_id": "da34621a-1355-5b6b-8ef5-e3bb60b2c28c",
"contact_name": "Def",
"favorite": true,
},
{
"contact_id": "0900bd96-319b-577b-8d01-975347667108",
"contact_name": "Abcd",
"favorite": false,
},
{
"contact_id": "0900bd96-319b-577b-8d01-975347667108",
"contact_name": "Abcde",
"favorite": true,
}
];
contacts.sort((a, b) {
final aFav = a['favorite'] as bool;
final bFav = b['favorite'] as bool;
if (aFav == bFav) {
final aName = a['contact_name'] as String;
final bName = b['contact_name'] as String;
return aName.compareTo(bName);
} else {
return aFav ? -1 : 1;
}
});
contacts.forEach(print);
// {contact_id: 0900bd96-319b-577b-8d01-975347667108, contact_name: Abcde, favorite: true}
// {contact_id: da34621a-1355-5b6b-8ef5-e3bb60b2c28c, contact_name: Def, favorite: true}
// {contact_id: 0900bd96-319b-577b-8d01-975347667108, contact_name: Abcd, favorite: false}
// {contact_id: ee76f661-91ff-5e6b-b900-79612065a840, contact_name: Bcd, favorite: false}
}
关于json - 在dart中按字母顺序对对象的JSON数组以及属性的 bool 值进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62893946/