說我有物件陣列
[
{
"name": "John",
"height": "172",
"weight": "87"
},
{
"name": "Tom",
"height": "167",
"weight": "67"
},
{
"name": "James",
"height": "156",
"weight": "uknown"
},
{
"name": "Jeremy",
"height": "unknown",
"weight": "85"
},
]
現在,如果我想按高度對它們進行排序,我也可以這樣persons.sort((a, b) => b.height - a.height);
做,如果我想按重量對它們進行排序,我也可以這樣做,但要使用重量persons.sort((a, b) => b.weight - a.weight);
到目前為止,這可以正常作業,但是有些值是未知的,并且如果我將此陣列保持在某種狀態并按未知值對其進行排序,則會將其弄亂并且無法正確排序。在物件多于 4 個的情況下,它會排序到某個點,但是一旦它碰到一個具有未知屬性的物件,它就會把它弄亂,然后陣列的其余部分就不會正確排序。我該如何克服呢?也許做一些將價值未知的物品推到底部的事情?
uj5u.com熱心網友回復:
您所要做的就是處理身高/體重為的特定情況unknown
并回傳適當的值
例如:
const items = [
{
"name": "John",
"height": "172",
"weight": "87"
},
{
"name": "Tom",
"height": "167",
"weight": "67"
},
{
"name": "James",
"height": "156",
"weight": "uknown"
},
{
"name": "Jeremy",
"height": "unknown",
"weight": "85"
},
{
"name": "Jeremy2",
"height": "162",
"weight": "85"
},
{
"name": "Jeremy3",
"height": "unknown",
"weight": "85"
},
];
items.sort((a,b) => {
if(b.height === 'unknown' && a.height ==='unknown') return 0;
else if(b.height === 'unknown') return -1;
else if(a.height === 'unknown') return 1;
else return a.height - b.height;
});
console.log(items);
比較器函式compare(a, b) 的作業方式如下:
if return value sort > 0, sort b before a.
else if return value sort < 0, sort a before b.
else if return value === 0 keep original order of a and b.
MDN 鏈接
編輯:
如果要處理逗號分隔的字串,則先轉換為數字:
items.sort((a,b) => {
if(b.height === 'unknown' && a.height ==='unknown') return 0;
else if(b.height === 'unknown') return -1;
else if(a.height === 'unknown') return 1;
else return parseFloat(a.height.replace(/,/g, '')) -
parseFloat(b.height.replace(/,/g, ''))
});
來源
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/470103.html
標籤:javascript 反应 还原 redux 工具包
上一篇:React創建元素道具未定義