我正在撰寫一個程式,其中物件包含字串中的數字,如下所示
亞洲盤口 (1-3)
亞洲盤口 (1-1)
亞洲盤口 (0-1)
I want to sort it as follow
亞洲盤口 (0-1)
亞洲盤口 (1-1)
亞洲盤口 (1-3)
這是代碼示例。我試過但沒有排序
const transformResult = {
"resultedEvents": [
{
"categoryName": "Football",
"name": "Arsenal vs Aston Villa",
"resultedMarkets": [
{
"name": "Asian Handicap",
"newName": "Asian Handicap",
"meaningMinorCode": "AH "
}
]
},
{
"categoryName": "Football",
"name": "Arsenal vs Aston Villa (Live)",
"resultedMarkets": [
{
"name": "Asian Handicap -0.5 (1-3)",
"newName": "Asian Handicap (1-3)",
"meaningMinorCode": "AH "
},
{
"name": "Asian Handicap -0.2 (1-1)",
"newName": "Asian Handicap (1-1)",
"meaningMinorCode": "AH "
},
{
"name": "Asian Handicap -0.2 (0-1)",
"newName": "Asian Handicap (0-1)",
"meaningMinorCode": "AH "
}
]
}
]
}
const data= transformResult.resultedEvents.map(item => item.resultedMarkets.sort(function (itemA, itemB) {
return itemA.newName < itemB.newName;
}));
console.log(JSON.stringify(data, null, 4));
上述程式未按預期排序
Expected
{
"resultedEvents": [
{
"categoryName": "Football",
"name": "Arsenal vs Aston Villa",
"resultedMarkets": [
{
"name": "Asian Handicap",
"newName": "Asian Handicap",
"meaningMinorCode": "AH "
}
]
},
{
"categoryName": "Football",
"name": "Arsenal vs Aston Villa (Live)",
"resultedMarkets": [
{
"name": "Asian Handicap -0.2 (0-1)",
"newName": "Asian Handicap (0-1)",
"meaningMinorCode": "AH "
},
{
"name": "Asian Handicap -0.2 (1-1)",
"newName": "Asian Handicap (1-1)",
"meaningMinorCode": "AH "
},
{
"name": "Asian Handicap -0.5 (1-3)",
"newName": "Asian Handicap (1-3)",
"meaningMinorCode": "AH "
}
]
}
]
}
如果我做錯了,請幫助我糾正。
我只想按 newName 對其進行排序
uj5u.com熱心網友回復:
- 您不會復制物件,因此對嵌套內容的任何操作都會更改原始內容。
- 如果您不需要副本,則不需要映射但可以使用 forEach
你似乎想要升序排序
const data = JSON.parse(JSON.stringify(transformResult))
data.resultedEvents.forEach(item => item.resultedMarkets.sort(function(itemA, itemB) {
if (itemA.newName > itemB.newName) return 1
if (itemA.newName < itemB.newName) return -1
return 0;
}));
console.log(data);
<script>
const transformResult = {
"resultedEvents": [{
"categoryName": "Football",
"name": "Arsenal vs Aston Villa",
"resultedMarkets": [{
"name": "Asian Handicap",
"newName": "Asian Handicap",
"meaningMinorCode": "AH "
}]
},
{
"categoryName": "Football",
"name": "Arsenal vs Aston Villa (Live)",
"resultedMarkets": [{
"name": "Asian Handicap -0.5 (1-3)",
"newName": "Asian Handicap (1-3)",
"meaningMinorCode": "AH "
},
{
"name": "Asian Handicap -0.2 (1-1)",
"newName": "Asian Handicap (1-1)",
"meaningMinorCode": "AH "
},
{
"name": "Asian Handicap -0.2 (0-1)",
"newName": "Asian Handicap (0-1)",
"meaningMinorCode": "AH "
}
]
}
]
}
</script>
uj5u.com熱心網友回復:
您可以嘗試以下代碼段。您要么比較整個字串,newName要么只比較該字串中的數字,而忽略字串的其余部分。
const transformResult = {
"resultedEvents": [
{
"categoryName": "Football",
"name": "Arsenal vs Aston Villa",
"resultedMarkets": [
{
"name": "Asian Handicap",
"newName": "Asian Handicap",
"meaningMinorCode": "AH "
}
]
},
{
"categoryName": "Football",
"name": "Arsenal vs Aston Villa (Live)",
"resultedMarkets": [
{
"name": "Asian Handicap -0.5 (1-3)",
"newName": "Asian Handicap (1-3)",
"meaningMinorCode": "AH "
},
{
"name": "Asian Handicap -0.2 (1-1)",
"newName": "Asian Handicap (1-1)",
"meaningMinorCode": "AH "
},
{
"name": "Asian Handicap -0.2 (0-1)",
"newName": "Asian Handicap (0-1)",
"meaningMinorCode": "AH "
}
]
}
]
}
const regExp = /\([^] \)/;
//sort by numbers within string
transformResult['resultedEvents'].forEach(a=> a['resultedMarkets'].sort((a, b) => regExp.exec(a['newName'])[0] < regExp.exec(b['newName'])[0] ? -1 : 1));
//sort by entire string
// transformResult['resultedEvents'].forEach(a=> a['resultedMarkets'].sort((a, b) => a['newName'] < b['newName'] ? -1 : 1));
console.log(transformResult);
uj5u.com熱心網友回復:
您正在使用升序排序,但您實際上想要降序排序。對于只有一位數字的數字,您可以簡單地將比較從 反轉<為>:
const transformResult = {
"resultedEvents": [
{
"categoryName": "Football",
"name": "Arsenal vs Aston Villa",
"resultedMarkets": [
{
"name": "Asian Handicap",
"newName": "Asian Handicap",
"meaningMinorCode": "AH "
}
]
},
{
"categoryName": "Football",
"name": "Arsenal vs Aston Villa (Live)",
"resultedMarkets": [
{
"name": "Asian Handicap -0.5 (1-3)",
"newName": "Asian Handicap (1-3)",
"meaningMinorCode": "AH "
},
{
"name": "Asian Handicap -0.2 (1-1)",
"newName": "Asian Handicap (1-1)",
"meaningMinorCode": "AH "
},
{
"name": "Asian Handicap -0.2 (0-1)",
"newName": "Asian Handicap (0-1)",
"meaningMinorCode": "AH "
}
]
}
]
}
const data= transformResult.resultedEvents.map(item => item.resultedMarkets.sort(function (itemA, itemB) {
return itemA.newName > itemB.newName;
}));
console.log(JSON.stringify(data, null, 4));
對于具有多個數字的數字,您必須決議字串:
const transformResult = {
"resultedEvents": [
{
"categoryName": "Football",
"name": "Arsenal vs Aston Villa",
"resultedMarkets": [
{
"name": "Asian Handicap",
"newName": "Asian Handicap",
"meaningMinorCode": "AH "
}
]
},
{
"categoryName": "Football",
"name": "Arsenal vs Aston Villa (Live)",
"resultedMarkets": [
{
"name": "Asian Handicap -0.5 (1-3)",
"newName": "Asian Handicap (1-3)",
"meaningMinorCode": "AH "
},
{
"name": "Asian Handicap -0.2 (1-1)",
"newName": "Asian Handicap (1-1)",
"meaningMinorCode": "AH "
},
{
"name": "Asian Handicap -0.2 (0-1)",
"newName": "Asian Handicap (0-1)",
"meaningMinorCode": "AH "
}
]
}
]
}
const data= transformResult.resultedEvents.map(item => item.resultedMarkets.sort(function (itemA, itemB) {
const valuesA = /\((\d )-(\d )\)/.exec(itemA.newName).slice(1);
const valuesB = /\((\d )-(\d )\)/.exec(itemB.newName).slice(1);
return valuesA[0] - valuesB[0] || valuesA[1] - valuesB[1];
}));
console.log(JSON.stringify(data, null, 4));
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/470108.html
標籤:javascript
