簡體   English   中英

根據屬性對對象數組重新排序

[英]Reorder array of objects based on attribute

我有一個對象數組,每個對象都有一個“ id”和一個“ name”。 我正在從服務器中檢索一個“ ID”,需要從此ID開始對數組重新排序。

示例代碼:

var myList = [
  {
    id: 0,
    name: 'Joe'
  },
  {
    id: 1,
    name: 'Sally'
  },
  {
    id: 2,
    name: 'Chris'
  },
  {
    id: 3,
    name: 'Tiffany'
  },
  {
    id: 4,
    name: 'Kerry'
  }
];

給定“ id”為2,如何重新排序數組,因此輸出如下:

var newList = [
  {
    id: 2,
    name: 'Chris'
  },
  {
    id: 3,
    name: 'Tiffany'
  },
  {
    id: 4,
    name: 'Kerry'
  },
  {
    id: 0,
    name: 'Joe'
  },
  {
    id: 1,
    name: 'Sally'
  }
];

您可以按給定的索引對數組進行切片 ,然后使用傳播語法返回一個新數組。

 const myList = [{id:0,name:'Joe'},{id:1,name:'Sally'},{id:2,name:'Chris'},{id:3,name:'Tiffany'},{id:4,name:'Kerry'}]; const slice = (arr, num) => [...arr.slice(num), ...arr.slice(0, num)]; console.log(slice(myList, 2)); 

嘗試這個:

 function orderList(list, id){ return list.slice(id).concat(list.slice(0,id)); } 

鏈接到演示

myList.sort(function(a,b){
 return a.id>2===b.id>2?a.id-b.id:b.id-a.id;
});

newList=myList;

http://jsbin.com/kenobunali/edit?console

您可以拼接所需的部分,並使用拼接將其插入數組的末尾。

 var myList = [{ id: 0, name: 'Joe' }, { id: 1, name: 'Sally' }, { id: 2, name: 'Chris' }, { id: 3, name: 'Tiffany' }, { id: 4, name: 'Kerry' }], id = 2; myList.splice(myList.length, 0, myList.splice(0, myList.findIndex(o => o.id === id))); console.log(myList); 

使用es6傳播語法

 var myList = [{ id: 0, name: 'Joe' }, { id: 1, name: 'Sally' }, { id: 2, name: 'Chris' }, { id: 3, name: 'Tiffany' }, { id: 4, name: 'Kerry' }], id = 2; var index = myList.findIndex(o => o.id == id); var arr = myList.splice(0, index); var result = [...myList, ...arr]; console.log(result); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM