如何按日期对不可变数据进行排序
How to sort immutable data by date
我正在尝试按日期对不可变数据进行排序,但我很难理解为什么这不起作用。一些示例使用普通的 javascript 排序函数,一些使用键上的 get/set 方法。我都试过了,但都没有运气。我应该使用 Map 而不是 List 吗?
const data = [{"dateTimeMoved":1490884969509,"dateTimeUploaded":"2017-03-30 09:42:51.970","latNew":"29.839658296606263","latOld":"29.85996055603027","lngNew":"-95.20913287997246","lngOld":"-95.18970489501953","marketId":"13","subdivisionId":"249044","subdivisionName":"Tidwell Lakes Ranch","territoryId":"4899","territoryName":"Central NE","userId":"1a94157a-bb38-4157-95ea-2ff8b43113e2","userName":"Rudy Sanchez","status":"denied","apprDenyDate":1491067499657,"comment":"Deny-- now approved, now denied","apprDenyById":"1a94157a-bb38-4157-95ea-2ff8b43113e2","apprDenyByName":"Rudy Sanchez"},{"dateTimeMoved":1490884636849,"dateTimeUploaded":"2017-03-30 09:37:17.924","latNew":"29.801395477185157","latOld":"29.822208688618133","lngNew":"-95.20630147308111","lngOld":"-95.20605336874723","marketId":"13","subdivisionId":"246090","subdivisionName":"Hidden Meadow","territoryId":"4899","territoryName":"Central NE","userId":"1a94157a-bb38-4157-95ea-2ff8b43113e2","userName":"Rudy Sanchez","status":"approved","apprDenyDate":1490884662547,"comment":"Approved this move","apprDenyById":"1a94157a-bb38-4157-95ea-2ff8b43113e2","apprDenyByName":"Rudy Sanchez"}]
const immutableData = Immutable.List(data)
const sortMarkerMoveDate = (option, array) => {
switch (option) {
case 'dateTimeMoved':
array.sort((a, b) => new Date(a.dateTimeMoved) - new Date(b.dateTimeMoved))
break
case '-dateTimeMoved':
array.sort((a, b) => new Date(b.dateTimeMoved) - new Date(a.dateTimeMoved))
break
}
return array
}
const dateTimeOption1 = '-dateTimeMoved'
const dateTimeOption2 = 'dateTimeMoved'
const result = sortMarkerMoveDate(dateTimeOption2, immutableData)
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.js"></script>
这里的问题是 .sort
不会改变它正在排序的列表,而是 return 一个新的排序列表。
这对你有用(为测试添加了更好的data
):
const data = [{"dateTimeMoved":2490884636849}, {"dateTimeMoved":10}, {"dateTimeMoved":1490884969509},{"dateTimeMoved":1490884636849}, {"dateTimeMoved":0}]
const immutableData = Immutable.List(data)
const sortMarkerMoveDate = (option, array) => {
switch (option) {
case 'dateTimeMoved':
return array.sort((a, b) => new Date(a.dateTimeMoved) - new Date(b.dateTimeMoved))
case '-dateTimeMoved':
return array.sort((a, b) => new Date(b.dateTimeMoved) - new Date(a.dateTimeMoved))
default:
return array;
}
}
const dateTimeOption1 = '-dateTimeMoved'
const dateTimeOption2 = 'dateTimeMoved'
const result = sortMarkerMoveDate(dateTimeOption2, immutableData)
console.log(result.toJS())
所以,马上 return array.sort(…)
。
我正在尝试按日期对不可变数据进行排序,但我很难理解为什么这不起作用。一些示例使用普通的 javascript 排序函数,一些使用键上的 get/set 方法。我都试过了,但都没有运气。我应该使用 Map 而不是 List 吗?
const data = [{"dateTimeMoved":1490884969509,"dateTimeUploaded":"2017-03-30 09:42:51.970","latNew":"29.839658296606263","latOld":"29.85996055603027","lngNew":"-95.20913287997246","lngOld":"-95.18970489501953","marketId":"13","subdivisionId":"249044","subdivisionName":"Tidwell Lakes Ranch","territoryId":"4899","territoryName":"Central NE","userId":"1a94157a-bb38-4157-95ea-2ff8b43113e2","userName":"Rudy Sanchez","status":"denied","apprDenyDate":1491067499657,"comment":"Deny-- now approved, now denied","apprDenyById":"1a94157a-bb38-4157-95ea-2ff8b43113e2","apprDenyByName":"Rudy Sanchez"},{"dateTimeMoved":1490884636849,"dateTimeUploaded":"2017-03-30 09:37:17.924","latNew":"29.801395477185157","latOld":"29.822208688618133","lngNew":"-95.20630147308111","lngOld":"-95.20605336874723","marketId":"13","subdivisionId":"246090","subdivisionName":"Hidden Meadow","territoryId":"4899","territoryName":"Central NE","userId":"1a94157a-bb38-4157-95ea-2ff8b43113e2","userName":"Rudy Sanchez","status":"approved","apprDenyDate":1490884662547,"comment":"Approved this move","apprDenyById":"1a94157a-bb38-4157-95ea-2ff8b43113e2","apprDenyByName":"Rudy Sanchez"}]
const immutableData = Immutable.List(data)
const sortMarkerMoveDate = (option, array) => {
switch (option) {
case 'dateTimeMoved':
array.sort((a, b) => new Date(a.dateTimeMoved) - new Date(b.dateTimeMoved))
break
case '-dateTimeMoved':
array.sort((a, b) => new Date(b.dateTimeMoved) - new Date(a.dateTimeMoved))
break
}
return array
}
const dateTimeOption1 = '-dateTimeMoved'
const dateTimeOption2 = 'dateTimeMoved'
const result = sortMarkerMoveDate(dateTimeOption2, immutableData)
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.js"></script>
这里的问题是 .sort
不会改变它正在排序的列表,而是 return 一个新的排序列表。
这对你有用(为测试添加了更好的data
):
const data = [{"dateTimeMoved":2490884636849}, {"dateTimeMoved":10}, {"dateTimeMoved":1490884969509},{"dateTimeMoved":1490884636849}, {"dateTimeMoved":0}]
const immutableData = Immutable.List(data)
const sortMarkerMoveDate = (option, array) => {
switch (option) {
case 'dateTimeMoved':
return array.sort((a, b) => new Date(a.dateTimeMoved) - new Date(b.dateTimeMoved))
case '-dateTimeMoved':
return array.sort((a, b) => new Date(b.dateTimeMoved) - new Date(a.dateTimeMoved))
default:
return array;
}
}
const dateTimeOption1 = '-dateTimeMoved'
const dateTimeOption2 = 'dateTimeMoved'
const result = sortMarkerMoveDate(dateTimeOption2, immutableData)
console.log(result.toJS())
所以,马上 return array.sort(…)
。