Javascript快速排序二维数组
因此,我正在尝试用React Native实现一种数据表视图。我真正需要做的就是对列进行排序。我试图排序的数据结构大致如下:Javascript快速排序二维数组,javascript,arrays,algorithm,sorting,react-native,Javascript,Arrays,Algorithm,Sorting,React Native,因此,我正在尝试用React Native实现一种数据表视图。我真正需要做的就是对列进行排序。我试图排序的数据结构大致如下: [ [ element, element, (9 elements per array) ], [ element, element, (9 elements per array) ] ] 其中,基本数组中总共有170多个数组,每个子数组有9个元素 我基本上可以使用这种方法完成排序: r
[
[
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
})
我遇到的问题是,排序需要很长的时间。我没有注意到web数据表的延迟,所以我想知道是否有某种排序算法应该用于更快的排序?我是否应该以不同的方式构建我的数据(尽管我通过一系列对象获得了类似的结果)?您可以消除三元运算-只需使用减法:
return a[col].value - b[col].value;
如果它们是字符串而不是数字:
return a[col].value.localeCompare(b[col].value);
您可以消除三元运算-只需使用减法:
return a[col].value - b[col].value;
如果它们是字符串而不是数字:
return a[col].value.localeCompare(b[col].value);
您可以将排序函数缩短为
items.sort(function(a,b) {
return a[col].value - b[col].value;
})
但即便如此,您可能也看不到速度有多大提高。如果您不希望数据经常更改,则备忘可能有助于连续呼叫。所有170个元素是否在同一屏幕上可见?如果没有,可以考虑使用惰性加载(排序前30个元素,显示结果,然后考虑其余的数据)。
items.sort(function(a,b) {
return a[col].value - b[col].value;
})
但即便如此,您可能也看不到速度有多大提高。如果您不希望数据经常更改,则备忘可能有助于连续呼叫。所有170个元素是否在同一屏幕上可见?如果没有,可以考虑使用惰性加载(排序前30个元素,显示结果,然后考虑其余的数据)。< P>使用JavaScript数组排序170个项目。
将排序这样的逻辑与呈现分离是一种很好的做法,这样就可以对其进行单元测试和测量。使用Javascript的数组对170个项进行排序。prototype.sort()不应花费超过几毫秒的时间,因此可能会出现呈现问题
将这样的逻辑排序与呈现分离是一种很好的做法,这样就可以对其进行单元测试和测量。如果
value
是一个数字,请使用返回a[col]。value-b[col].value
虽然我不希望您的方法花费这么长时间。子数组的大小不应该影响排序时间。值是否可以相等?你应该在他们返回时返回0
。@Barmar谢谢,等于返回0可能有点帮助。显著加快操作的是渲染前20行。底层数据仍然存在(正在排序),但React不必在排序后重新渲染那么多数据。。。不幸的是,这让我认为这是一个react渲染问题,而不是排序本身(叹气)。如果value
是一个数字,请使用returna[col].value-b[col].value
虽然我不希望您的方法花费这么长时间。子数组的大小不应该影响排序时间。值是否可以相等?你应该在他们返回时返回0
。@Barmar谢谢,等于返回0可能有点帮助。显著加快操作的是渲染前20行。底层数据仍然存在(正在排序),但React不必在排序后重新渲染那么多数据。。。不幸的是,这让我认为这是一个react呈现问题,而不是排序本身(叹气)我不相信localeCompare出于任何原因在react Native中工作。我不相信localeCompare出于任何原因在react Native中工作。如果不对整个数组进行排序,如何知道前30个是哪一个?这可以在后端处理,让它发送9个额外的条目数组,按每列的最低值排序。如果不对整个数组排序,如何知道前30个是哪一个?这可以在后端处理,让它发送9个额外的条目数组,按每列的最低值排序。