如何根据对象的 属性 值对对象数组进行排序,该值本身不是自然可比的,但具有基于规则的优先级?
How does one sort an array of objects by an object's property value which itself is not naturally comparable but has a rule based precedence?
我有一个对象。我需要按 TranType 属性.
对其进行排序
Trantype 就像 CS+、CS-、RS+、RS-、OPO、OPI、安全输入、安全输出。
我需要按 CS+,CS-,RS+,RS-, OPO, OPI, Security in, Security out
示例:
[
{
'TranType':'CS+',
'Name': 'Kumar'
},
{
'TranType':'RS+',
'Name': 'Lak'
},
{
'TranType':'CS+',
'Name': 'Cnk'
},
{
'TranType':'CS-',
'Name': 'Pro'
},
{
'TranType':'CS-',
'Name': 'Lhj'
},
{
'TranType':'RS-',
'Name': 'Speed'
},
{
'TranType':'OPI',
'Name': 'Neck'
},
{
'TranType':'OPO',
'Name': 'Dok'
},
{
'TranType':'Security In',
'Name': 'Kol'
},
{
'TranType':'Security out',
'Name': 'Klp'
},
{
'TranType':'OPI',
'Name': 'Tpi'
},
{
'TranType':'RS+',
'Name': 'Alo'
},
{
'TranType':'OPO',
'Name': 'Tpp'
},
{
'TranType':'Security In',
'Name': 'Jkl'
},
{
'TranType':'RS-',
'Name': 'Aoi'
},
{
'TranType':'Security out',
'Name': 'Nko'
}
]
我需要按以下顺序排序。
这里我需要优先考虑(CS+、OPI、RS+、Security In)。而(CS-、RS-、OPO、Security out)是第二优先级。
[
{
'TranType':'CS+',
'Name': 'Kumar'
},
{
'TranType':'CS+',
'Name': 'Cnk'
},
{
'TranType':'OPI',
'Name': 'Neck'
},
{
'TranType':'OPI',
'Name': 'Tpi'
},
{
'TranType':'RS+',
'Name': 'Lak'
},
{
'TranType':'RS+',
'Name': 'Alo'
},
{
'TranType':'Security In',
'Name': 'Kol'
},
{
'TranType':'Security In',
'Name': 'Jkl'
},
{
'TranType':'CS-',
'Name': 'Pro'
},
{
'TranType':'CS-',
'Name': 'Lhj'
},
{
'TranType':'RS-',
'Name': 'Speed'
},
{
'TranType':'RS-',
'Name': 'Aoi'
},
{
'TranType':'OPO',
'Name': 'Dok'
},
{
'TranType':'OPO',
'Name': 'Tpp'
},
{
'TranType':'Security out',
'Name': 'Klp'
},
{
'TranType':'Security out',
'Name': 'Nko'
}
]
请帮助我获得预期的输出。
最简单直接的方法是使用对象查找 TranType
优先级值 ...
const tranTypePrecedences = {
'CS+': 1,
'OPI': 2,
'RS+': 3,
'Security In': 4,
'CS-': 5,
'RS-': 6,
'OPO': 7,
'Security out': 8,
};
console.log(
[{
'TranType':'CS+',
'Name': 'Kumar'
}, {
'TranType':'RS+',
'Name': 'Lak'
}, {
'TranType':'CS+',
'Name': 'Cnk'
}, {
'TranType':'CS-',
'Name': 'Pro'
}, {
'TranType':'CS-',
'Name': 'Lhj'
}, {
'TranType':'RS-',
'Name': 'Speed'
}, {
'TranType':'OPI',
'Name': 'Neck'
}, {
'TranType':'OPO',
'Name': 'Dok'
}, {
'TranType':'Security In',
'Name': 'Kol'
}, {
'TranType':'Security out',
'Name': 'Klp'
}, {
'TranType':'OPI',
'Name': 'Tpi'
}, {
'TranType':'RS+',
'Name': 'Alo'
}, {
'TranType':'OPO',
'Name': 'Tpp'
}, {
'TranType':'Security In',
'Name': 'Jkl'
}, {
'TranType':'RS-',
'Name': 'Aoi'
}, {
'TranType':'Security out',
'Name': 'Nko'
}].sort((a, b) =>
tranTypePrecedences[a.TranType] - tranTypePrecedences[b.TranType]
)
);
.as-console-wrapper { min-height: 100%!important; top: 0; }
我有一个对象。我需要按 TranType 属性.
对其进行排序
Trantype 就像 CS+、CS-、RS+、RS-、OPO、OPI、安全输入、安全输出。
我需要按 CS+,CS-,RS+,RS-, OPO, OPI, Security in, Security out
示例:
[
{
'TranType':'CS+',
'Name': 'Kumar'
},
{
'TranType':'RS+',
'Name': 'Lak'
},
{
'TranType':'CS+',
'Name': 'Cnk'
},
{
'TranType':'CS-',
'Name': 'Pro'
},
{
'TranType':'CS-',
'Name': 'Lhj'
},
{
'TranType':'RS-',
'Name': 'Speed'
},
{
'TranType':'OPI',
'Name': 'Neck'
},
{
'TranType':'OPO',
'Name': 'Dok'
},
{
'TranType':'Security In',
'Name': 'Kol'
},
{
'TranType':'Security out',
'Name': 'Klp'
},
{
'TranType':'OPI',
'Name': 'Tpi'
},
{
'TranType':'RS+',
'Name': 'Alo'
},
{
'TranType':'OPO',
'Name': 'Tpp'
},
{
'TranType':'Security In',
'Name': 'Jkl'
},
{
'TranType':'RS-',
'Name': 'Aoi'
},
{
'TranType':'Security out',
'Name': 'Nko'
}
]
我需要按以下顺序排序。
这里我需要优先考虑(CS+、OPI、RS+、Security In)。而(CS-、RS-、OPO、Security out)是第二优先级。
[
{
'TranType':'CS+',
'Name': 'Kumar'
},
{
'TranType':'CS+',
'Name': 'Cnk'
},
{
'TranType':'OPI',
'Name': 'Neck'
},
{
'TranType':'OPI',
'Name': 'Tpi'
},
{
'TranType':'RS+',
'Name': 'Lak'
},
{
'TranType':'RS+',
'Name': 'Alo'
},
{
'TranType':'Security In',
'Name': 'Kol'
},
{
'TranType':'Security In',
'Name': 'Jkl'
},
{
'TranType':'CS-',
'Name': 'Pro'
},
{
'TranType':'CS-',
'Name': 'Lhj'
},
{
'TranType':'RS-',
'Name': 'Speed'
},
{
'TranType':'RS-',
'Name': 'Aoi'
},
{
'TranType':'OPO',
'Name': 'Dok'
},
{
'TranType':'OPO',
'Name': 'Tpp'
},
{
'TranType':'Security out',
'Name': 'Klp'
},
{
'TranType':'Security out',
'Name': 'Nko'
}
]
请帮助我获得预期的输出。
最简单直接的方法是使用对象查找 TranType
优先级值 ...
const tranTypePrecedences = {
'CS+': 1,
'OPI': 2,
'RS+': 3,
'Security In': 4,
'CS-': 5,
'RS-': 6,
'OPO': 7,
'Security out': 8,
};
console.log(
[{
'TranType':'CS+',
'Name': 'Kumar'
}, {
'TranType':'RS+',
'Name': 'Lak'
}, {
'TranType':'CS+',
'Name': 'Cnk'
}, {
'TranType':'CS-',
'Name': 'Pro'
}, {
'TranType':'CS-',
'Name': 'Lhj'
}, {
'TranType':'RS-',
'Name': 'Speed'
}, {
'TranType':'OPI',
'Name': 'Neck'
}, {
'TranType':'OPO',
'Name': 'Dok'
}, {
'TranType':'Security In',
'Name': 'Kol'
}, {
'TranType':'Security out',
'Name': 'Klp'
}, {
'TranType':'OPI',
'Name': 'Tpi'
}, {
'TranType':'RS+',
'Name': 'Alo'
}, {
'TranType':'OPO',
'Name': 'Tpp'
}, {
'TranType':'Security In',
'Name': 'Jkl'
}, {
'TranType':'RS-',
'Name': 'Aoi'
}, {
'TranType':'Security out',
'Name': 'Nko'
}].sort((a, b) =>
tranTypePrecedences[a.TranType] - tranTypePrecedences[b.TranType]
)
);
.as-console-wrapper { min-height: 100%!important; top: 0; }