首页 > 解决方案 > 按属性排序数组而不使用第一个对象

问题描述

我有一个对象数组,我想按对象 ID 对它们进行排序。我尝试使用 options.sort((a, b) => a.id.localeCompare(b.id)); 但没有按预期工作,因为它甚至对“所有”对象进行排序,我不想要这个(id = 'all'的对象应该是我数组中的第一个,之后应该是升序的对象命令)。下面你可以看到我的代码的输入和输出

输入:

 var items = 
           [{ 'Name':'All', 'id': 'all'
            { 'Name':'item1', 'id': '003' }
            { 'Name':'item2', 'id': '001' }
            { 'Name':'item3', 'id': '002' }];

输出:

  var items = 
           [{ 'Name':'item2', 'id': '001' }
            { 'Name':'item3', 'id': '002' }
            { 'Name':'item1', 'id': '003' }
            { 'Name':'All', 'id': 'all'}];

标签: arraysangular

解决方案


 function compare(key, order = 'desc') {
  return (a, b) => {
    if (a[key] > b[key])
      return order === 'desc' ? -1 : 1;
    if (a[key] < b[key])
      return order === 'desc' ? 1 : -1;
    return 0;
  };
 }


const data = [
      { 'Name':'All', 'id': 'all'},
      { 'Name':'item3', 'id': '003' },
      { 'Name':'item1', 'id': '001' },
      { 'Name':'item2', 'id': '002' }
 ];
 
 const sortedData = data.sort(compare('Name', 'asce'));
 console.log('sorted: ', sortedData);


推荐阅读