[英]How to sort an array of objects depending on a custom sort order using underscore
[英]custom sort order on array of objects
我知道我們可以定義 json 對象數組的自定義排序函數。 但是如果訂單既不是desc nor asc
? 例如,假設我的數組如下所示:
[ {
name: 'u'
},
{
name: 'n'
},
{
name: 'a'
},
{
name: 'n',
}
]
輸出應如下所示:
[ {
name: 'n'
},
{
name: 'n'
},
{
name: 'a'
},
{
name: 'u',
}
]
其中所有以n
開頭的名稱先排序,然后再排序。 我嘗試了以下自定義排序功能:
_sortByName(a, b){
if (a.name === 'n'){
return 1;
} else if(b.name === 'n'){
return 1;
} else if(a.name < b.name){
return 1;
} else if(a.name > b.name){
return -1;
}
}
但是為對象返回的順序是錯誤的。 這里出了什么問題?
如果您有任意排序順序,一個選項是將訂單分配給數組,然后使用indexOf
:
var sortOrder = ['n', 'a', 'u']; var myArray = [{ name: 'u' }, { name: 'n' }, { name: 'a' }, { name: 'n' } ]; myArray.sort(function(a, b) { return sortOrder.indexOf(a.name) - sortOrder.indexOf(b.name); }); console.log(myArray);
如果在任一數組中有許多值,則首先創建值索引映射然后使用sortOrder[a.name]
可能是值得的。
1)你可以在這里使用indexOf
const dict = "nau"; var myArray = [ { name: "u", }, { name: "n", }, { name: "a", }, { name: "n", }, ]; myArray.sort((a, b) => dict.indexOf(a.name) - dict.indexOf(b.name)); console.log(myArray);
/* This is not a part of answer. It is just to give the output full height. So IGNORE IT */ .as-console-wrapper { max-height: 100% !important; top: 0; }
2)你可以在這里使用地圖
我在兩個character
之間添加了一些間隙/空間,因為它們之間可能會有其他字符,因此您可以將它們放在它們之間
const order = { n: 100, a: 200, u: 300, }; var myArray = [ { name: "u", }, { name: "n", }, { name: "a", }, { name: "n", }, ]; myArray.sort((a, b) => order[a.name] - order[b.name]); console.log(myArray);
/* This is not a part of answer. It is just to give the output full height. So IGNORE IT */ .as-console-wrapper { max-height: 100% !important; top: 0; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.