在Javascript中根据内部数组对外部对象进行排序

我需要根据 API 响应中的对象数组来渲染卡片,如下所示(简化版):


[

{

    name: 'John',

    vouchers: [

        {

            voucherId: 1,

            issuedAt: '2020-12-15T16:26:36.3548091+01:00'

        },

        {

            voucherId: 2,

            issuedAt: '2020-12-15T16:26:36.3548091+01:00'

        },

    ]

},

{

    name: 'Lisa',

    vouchers: [

        {

            voucherId: 1,

            issuedAt: '2020-12-13T16:26:36.3548091+01:00'

        }

    ]

}]

现在我想对这个对象数组(其中包含一个对象数组)进行 NgFor 并根据“issuedAt”日期进行排序(外部对象)。


注意:每个用户的优惠券数组的 IssuedAt 日期始终相同。


我正在考虑使用 .map => .sort => Number(new Date(DATE_HERE)) 的某种组合,但无法让它工作


繁星coding
浏览 76回答 3
3回答

慕雪6442864

使用 Date.parse() 从日期字符串中获取毫秒let data = [{    name: 'John',    vouchers: [{        voucherId: 1,        issuedAt: '2020-12-15T16:26:36.3548091+01:00',      },      {        voucherId: 2,        issuedAt: '2020-12-15T16:26:36.3548091+01:00',      },    ],  },  {    name: 'Lisa',    vouchers: [{      voucherId: 1,      issuedAt: '2020-12-13T16:26:36.3548091+01:00',    }, ],  },];data.sort(function(a, b) {  return (    Date.parse(a['vouchers'][0]['issuedAt']) -    Date.parse(b['vouchers'][0]['issuedAt'])  );});console.log(data)

阿波罗的战车

鉴于凭证数组都具有相同的issuedAt属性,您应该能够仅使用第一个条目来执行此操作:const data = [{name: 'John', vouchers: [{voucherId: 1, issuedAt: '2020-12-15T16:26:36.3548091+01:00'}, {voucherId: 2, issuedAt: '2020-12-15T16:26:36.3548091+01:00'}]}, {name: 'Lisa', vouchers: [{voucherId: 1, issuedAt: '2020-12-13T16:26:36.3548091+01:00'}]}]const sorter = ({vouchers: [{issuedAt: x}]}, {vouchers: [{issuedAt: y}]}) =>&nbsp;&nbsp; x < y ? -1 : x > y ? 1 : 0console .log ([...data] .sort (sorter))我们使用[...data]廉价的浅克隆;我不想改变输入数据。但data .sort (sorter)如果你真的想改变你的数组,你可以直接调用。

MYYA

如果您希望首先列出最近时间的人员,请获取所有优惠券的最大发放日期并减去它们。注意:我更改了时间,以便排序真正起作用。const result = [{&nbsp; name: 'John',&nbsp; vouchers: [{&nbsp; &nbsp; voucherId: 1,&nbsp; &nbsp; issuedAt: '2020-12-15T16:26:36.3548091+01:00'&nbsp; }, {&nbsp; &nbsp; voucherId: 2,&nbsp; &nbsp; issuedAt: '2020-12-15T17:26:36.3548091+01:00'&nbsp; }, ]}, {&nbsp; name: 'John',&nbsp; vouchers: [{&nbsp; &nbsp; voucherId: 1,&nbsp; &nbsp; issuedAt: '2020-12-13T18:26:36.3548091+01:00'&nbsp; }]}];const sorted = result.sort(&nbsp; ({ vouchers: a = [] }, { vouchers: b = [] }) =>&nbsp; &nbsp; Math.max(...a.map(({ issuedAt: d = 0 }) => new Date(d))) -&nbsp;&nbsp; &nbsp; Math.max(...b.map(({ issuedAt: d = 0 }) => new Date(d))));&nbsp;&nbsp;console.log(sorted);.as-console-wrapper { top: 0; max-height: 100% !important; }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript