gpt4 book ai didi

javascript - 在 Redux reducer 中对对象数组进行排序

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:41:20 25 4
gpt4 key购买 nike

我正在尝试对这样的数组进行排序(我的状态):

[
{
name:"Aenean in justo ante"
},
{
name:"Phasellus viverra mattis dolor"
}
]

我向 reducer 发送一个 Action :( reducer 的一部分)

case 'SORT_COLLECTION':
return state.sort(function(a, b) {
var nameA = a.name.toLowerCase(), nameB = b.name.toLowerCase();
if (nameA < nameB) {
return -1;
}
if (nameA > nameB) {
return 1;
}
return 0;
})

但它不起作用。谁能告诉我错误在哪里?

最佳答案

排序功能应该可以正常工作。但是你不应该改变 reducer 中的原始状态。您可以在排序前调用 state.slice() 来创建 state 数组的副本。

case 'SORT_COLLECTION':
return state.slice().sort(function(a, b) {
var nameA = a.name.toLowerCase(),
nameB = b.name.toLowerCase()
if (nameA < nameB)
return -1
if (nameA > nameB)
return 1
return 0
})

当然,你也可以定义一个更简单的排序函数。

const state = [{name:'foo'},{name:'bar'},{name:'baz'}]
const sortByKey = key => (a, b) => a[key] > b[key] ? 1 : -1
const sorted = state.slice().sort(sortByKey('name'))
console.log(`state=${JSON.stringify(state)}\nsorted=${JSON.stringify(sorted)}`)

关于javascript - 在 Redux reducer 中对对象数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45963571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com