如何对含UNIX时间戳date字段对象的Immutable JS List按日期排序?
按UNIX时间戳排序Immutable JS List的方法
嘿,这个需求其实很好实现,Immutable JS的List自带的sort()方法完全能搞定,而且因为Immutable的不可变性,排序后会返回一个新的List,原数据不会被改动,非常安全。
基础场景:元素是普通对象
如果你的List里是普通JS对象(就像你给出的示例),直接在sort()里传入一个比较函数,对比两个元素的date值就行:
import { List } from 'immutable'; // 你的原始数据 const originalList = List([ { someKey: 1, date: 823748943 }, { someKey: 2, date: 2389472938 }, { someKey: 3, date: 81278734 } ]); // 升序排序(从最早的时间到最晚) const sortedAscending = originalList.sort((itemA, itemB) => itemA.date - itemB.date); // 降序排序(从最晚的时间到最早) const sortedDescending = originalList.sort((itemA, itemB) => itemB.date - itemA.date);
进阶场景:元素是Immutable Map
如果你的List里的元素是Immutable的Map(而不是普通对象),那获取date值的时候要用到get()方法,写法稍微调整一下:
import { List, Map } from 'immutable'; const mapList = List([ Map({ someKey: 1, date: 823748943 }), Map({ someKey: 2, date: 2389472938 }), Map({ someKey: 3, date: 81278734 }) ]); // 升序排序 const sortedMapAsc = mapList.sort((mapA, mapB) => mapA.get('date') - mapB.get('date'));
简单解释下原理:UNIX时间戳本身就是数字,所以用减法就能直接得到排序所需的正负值——如果itemA.date - itemB.date是负数,说明A的时间更早,会排在前面;正数则相反。
内容的提问来源于stack exchange,提问作者four-eyes
相关产品推荐
相关产品推荐

