我正在制作一個排序函式,其中按值排序將是動態的,并且陣列中物件中的某些屬性值可能為假。
localeCompare由于可能的特殊字符等,我想使用。
如示例中所示,如果一個false值位于陣列的中間,它會中斷。我確實嘗試實作可選更改,但它根本不起作用:
return a.sortValue?.[1].localeCompare(b.sortValue?.[1])
預期結果是:
為user_id:4 1 2 3
和partner_id: 4 1 3 2
排序值總是(當不為假時)在陣列的 1 個索引中。最后想false,我仍然需要它在串列中......
如果不進行一些自定義排序功能,這可能嗎?
let arr = [{
id: 1,
user_id: ["ignoreThis", 'B'],
partner_id: ["ignoreThis", 'B']
},
{
id: 2,
user_id: ["ignoreThis", 'D'],
partner_id: false
},
{
id: 3,
user_id: false,
partner_id: ["ignoreThis", 'D']
},
{
id: 4,
user_id: ["ignoreThis", 'A'],
partner_id: ["ignoreThis", 'A']
}
]
const sortBy = sortValue => {
arr.sort(function(a, b) {
return a[sortValue][1].localeCompare(b[sortValue][1])
})
}
sortBy('user_id')
arr.forEach(i => console.log(i.id))
sortBy('partner_id')
arr.forEach(i => console.log(i.id))
.as-console-wrapper {
min-height: 100% !important;
}
uj5u.com熱心網友回復:
您可以先檢查該值,然后按所需值排序。這種方法需要一個默認的空字串來使用localeCompare.
const
array = [{ id: 1, user_id: ["ignoreThis", 'B'], partner_id: ["ignoreThis", 'B'] }, { id: 2, user_id: ["ignoreThis", 'D'], partner_id: false }, { id: 3, user_id: false, partner_id: ["ignoreThis", 'D'] }, { id: 4, user_id: ["ignoreThis", 'A'], partner_id: ["ignoreThis", 'A'] }]
sortBy = key => array.sort((a, b) =>
!a[key] - !b[key] ||
(a[key]?.[1] || '').localeCompare(b[key]?.[1])
);
sortBy('user_id');
console.log(...array.map(({ id }) => id));
sortBy('partner_id');
console.log(...array.map(({ id }) => id));
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/463373.html
標籤:javascript
上一篇:在Promise物件未渲染之后
