我想根据布尔值对数组进行排序,但前提是第二个条件为真。
我可以像这样用布尔对Array进行排序(我知道你也可以省略if部分,但我想知道它是否像这样工作。
posts = sortBy(posts, [function(post) {
if (post.featured_post === true) {
return post
}
}]);
但现在我想补充另一个条件:
posts = sortBy(posts, [function(post) {
if (post.featured_post === true && post.date >= today) {
return post
}
}]);
但这似乎不再起作用了。我得到了相当随机的订单。 也许我也不明白如何将sortBy与函数一起使用,因此非常感谢一些帮助。
PS:我没有收到任何错误,只是没有正确排序。
干杯
答案 0 :(得分:1)
由于@ gforce301的问题,我意识到我从未将事件日期转换为javascript Date对象。通过这样做:
const today = new Date().setHours(0,0,0,0)
posts = sortBy(posts, [function(post) {
const postDate = new Date(post.date).setHours(0,0,0,0)
if (post.featured_post && postDate >= today) {
return post
}
}])
我实际上让sortBy工作 - 即使是分支语句。很高兴有一个关于lodash的sortBy如何工作的另一个例子。
感谢您的帮助。干杯
答案 1 :(得分:0)
你的解决方案有点随意,我认为很难理解/适应。
这个怎么样?
import { get } from 'lodash/fp'
import { overEvery, sortBy, negate } from 'lodash'
const shouldBeFirst = overEvery(
get('featured_post'),
({ date }) => (new Date(date).setHours(0,0,0,0)) == (new Date().setHours(0,0,0,0))
)
const preSortedPosts = sortBy(posts, 'date')
const sortedPosts = [
...preSortedPosts.filter(shouldBeFirst),
...preSortedPosts.filter(negate(shouldBeFirst))
]