【问题标题】:ReactJS array.sort doesn't work. What's wrong with my sorting statement?ReactJS array.sort 不起作用。我的排序语句有什么问题?
【发布时间】:2021-08-25 17:54:57
【问题描述】:

这个问题已经被回答了一千次了,但是我这辈子都无法让它发挥作用。我有一个数组products,您猜对了,它包含产品。一个产品基本上是这样的:

product{
    product.product_name,
    product.price,
    product.amount,
    product.store_name,
    product.image_url
}

不确定这是否是为 React 显示它的正确方法,但你明白了。我想在表格中显示这些产品。现在,我制作了一个需要对这些进行排序的下拉选择器。因此,例如,当有人在下拉列表中选择“价格”时,需要按价格订购包含产品的表格。目前我将它们排序如下:

if (order == 0){
  sortedProducts = products.sort((a, b) => b.product_name - a.product_name);
} else if (order == 1){
  sortedProducts = products.sort((a, b) => b.price - a.price);
} else if (order == 2){
  sortedProducts = products.sort((a, b) => b.amount - a.amount);
} else {
  sortedProducts = products.sort((a, b) => b.store_name - a.store_name);
}
var items = [];
for (var i = pageNo * pagination; i < sortedProducts.length; i++) {
  [... convert to table rows ...]
}

return items;

我从this SO post得到了代码,用这个方法找到了另一个博客。但是,我不太了解它,它也不起作用。我的第一次尝试是这样的:

sortedProducts = products.sort(p => p.product_name);

对于产品名称,但遗憾的是这也不起作用。有人知道我如何做到这一点吗?

【问题讨论】:

  • compareFunction 中的减法不适用于字符串。你需要localeCompare。或者您可以使用 &gt; 运算符并有条件地返回 1 和 -1。这适用于数字和字符串。
  • 这能回答你的问题吗? Sorting an array of objects by property values
  • 是的,尤其是链接文档。谢谢!

标签: arrays reactjs react-native sorting


【解决方案1】:

您有 2 种排序方式:

这是最简单的升序排序方式:

(在您的情况下 - 尝试添加 ? 1 : -1 - 降序 - 只是反向 - ? -1 : 1

const list = [
  { n1: 10, test: "b"},
  { n1: 2,  test: "a"},
  { n1: 8, test: "c"},
]

list.sort((a, b) => (a.n1 > b.n1) ? 1 : -1)
test = list.sort((a, b) => (a.test > b.test) ? 1 : -1)


console.log(list)
console.log(test)

【讨论】:

  • 嗯,它现在确实排序了,但不是在正确的值上。感谢您的帮助,我需要进一步解构我的代码。
  • 这取决于你的 - 订单变量 - 我建议保持挂钩 - 与 UI 相关,哪个属性应该作为排序机制的基础
  • 经过一些实验,我发现无论我选择哪种订单类型,它总是按商店类型排序(我使用调试器模式来确保它实际上只在那些方法中得到)。你知道为什么吗?
  • 我不确定 - 但这取决于您的订单变量我编辑问题以按对象中的 2 个参数进行排序
猜你喜欢
  • 1970-01-01
  • 2014-10-04
  • 1970-01-01
  • 1970-01-01
  • 2013-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多