为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁星coding 2023-12-14 16:05:23
我需要根据 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)) 的某种组合,但无法让它工作
查看完整描述

3 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

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


查看完整回答
反对 回复 2023-12-14
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

鉴于凭证数组都具有相同的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}]}) => 

  x < y ? -1 : x > y ? 1 : 0


console .log ([...data] .sort (sorter))


我们使用[...data]廉价的浅克隆;我不想改变输入数据。但data .sort (sorter)如果你真的想改变你的数组,你可以直接调用。


查看完整回答
反对 回复 2023-12-14
?
MYYA

TA贡献1868条经验 获得超4个赞

如果您希望首先列出最近时间的人员,请获取所有优惠券的最大发放日期并减去它们。


注意:我更改了时间,以便排序真正起作用。


const result = [{

  name: 'John',

  vouchers: [{

    voucherId: 1,

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

  }, {

    voucherId: 2,

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

  }, ]

}, {

  name: 'John',

  vouchers: [{

    voucherId: 1,

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

  }]

}];


const sorted = result.sort(

  ({ vouchers: a = [] }, { vouchers: b = [] }) =>

    Math.max(...a.map(({ issuedAt: d = 0 }) => new Date(d))) - 

    Math.max(...b.map(({ issuedAt: d = 0 }) => new Date(d)))

);

  

console.log(sorted);

.as-console-wrapper { top: 0; max-height: 100% !important; }


查看完整回答
反对 回复 2023-12-14
  • 3 回答
  • 0 关注
  • 71 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信