我有一个从API返回的对象数组。
let arr = [
{name: 'Blur'},
{name: 'The Beatles'},
{name: 'Oasis'},
{name: 'Arctic Monkeys'},
{name: 'Elvis'}
];
我一直希望
Arctic Monkeys
在Oasis
之前排位,而其他项目保持原样。有时,API会以正确的顺序返回它们,但在某些情况下,它们将像上面那样以错误的方式出现。谁能建议最好的方法吗?
我知道我可以做这样的事情,但是觉得必须有更好的方法。
for(let i = 0; i < arr.length; i++){
if(arr[i].name == 'Arctic Monkeys' && arr[i - 1].name === 'Oasis' ){
let oasisObj = arr[i];
arr[i - 1] = arr[i];
arr[i] = oasisObj;
}
}
或者,也许我不应该改变这个数组并创建一个全新的数组?
最佳答案
我认为最好的方法是在服务器端使用一些特定的排序规则进行调整。要仅在客户端上修复特定方案,您可以这样做。
let arr = [
{name: 'Blur'},
{name: 'The Beatles'},
{name: 'Oasis'},
{name: 'Arctic Monkeys'},
{name: 'Elvis'}
]
console.log(arr.map(o => o.name))
let iO = arr.findIndex(o => o.name === 'Oasis')
let iA = arr.findIndex(o => o.name === 'Arctic Monkeys')
if ((iA !== -1 && iO !== -1) && iA > iO) {
let o = arr[iO]
let a = arr[iA]
arr[iO] = a
arr[iA] = o
}
console.log(arr.map(o => o.name))