根据属性重新排序对象数组

时间:2017-07-11 21:01:27

标签: javascript arrays angular sorting

我有一个对象数组,每个对象都有一个'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'
  }
];

5 个答案:

答案 0 :(得分:1)

您可以在给定索引处切片数组,并使用 spread语法返回一个新数组。

404

答案 1 :(得分:1)

试试这个:



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




链接到demo

答案 2 :(得分:0)

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

答案 3 :(得分:0)

你可以拼接想要的部分并使用拼接将它插入数组的末尾。



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);




答案 4 :(得分:0)

使用 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);