Javascript快速排序二维数组

时间:2019-05-16 21:29:23

标签: javascript arrays algorithm sorting react-native

所以我试图在React Native中实现一种数据表视图。我真正需要做的就是对列进行排序。我要排序的数据结构有点像这样:

[
   [
     element,
     element,
     (9 elements per array)
   ],
   [
     element,
     element,
     (9 elements per array)
   ]
]

在基本数组中总共有170多个数组,每个子数组都有9个元素。

我基本上可以使用以下方法完成排序:

return items.sort(function(a,b) {
   return a[col].value > b[col].value ? 1:-1
})

我遇到的问题是排序需要一两秒钟。我没有注意到网络数据表的这种延迟,所以我想知道是否应该使用某种排序算法来进行更快的排序?我是否应该以不同的方式构造数据结构(尽管我通过拥有一组对象获得相似的结果)?

3 个答案:

答案 0 :(得分:1)

您可以将排序功能缩短为

items.sort(function(a,b) {
   return a[col].value - b[col].value;
})

但是即使那样,您在速度上也不会看到太多改进。如果您不希望数据经常更改,则记忆可能有助于后续调用。是否可以在同一屏幕上看到所有170个元素?如果没有,则可以考虑使用延迟加载(对前30个元素进行排序,显示结果,然后考虑其余数据)。

答案 1 :(得分:1)

使用Javascript的Array.prototype.sort()排序170个项目的时间不应超过几毫秒,因此很可能是呈现问题。

最好将这种排序逻辑与渲染分开,以便可以对其进行单元测试和度量。

答案 2 :(得分:0)

您可以消除三元运算-只需使用减法即可:

return a[col].value - b[col].value;

如果它们是字符串,而不是数字:

return a[col].value.localeCompare(b[col].value);