我有一个从API返回的对象数组。

let arr = [
  {name: 'Blur'},
  {name: 'The Beatles'},
  {name: 'Oasis'},
  {name: 'Arctic Monkeys'},
  {name: 'Elvis'}
];


我一直希望Arctic MonkeysOasis之前排位,而其他项目保持原样。有时,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))

09-16 16:52