【发布时间】:2019-01-24 04:24:03
【问题描述】:
因为我使用的是 Nativescript,所以我在 Android 和 iOS 上使用相同的 Typescript 代码。
我有一个非常大的数据集,大约有 1000-2000 个(可能更大)对象,数组中的数据值非常大。
const unsorted = [
...,
{
name: "name1",
value: 10000000
},{
name: "name120",
value: 200000000
},{
name: "name42",
value: 3
},{
name: "name1203",
value: 1000000000000
},
...
];
const sorted = unsorted.sort((a,b) => (b.value-a.value));
在 Android 上,sorted 始终正确排序,但 iOS 不是。 iOS 数组返回“半排序”——前 10 或 20 个排序正确,但随后随机排序错误,类似于下面的示例:
[...1003, 26, 1002, 1001, ..., 20, 19, 14, 18, 17, 16, 15, 13, 12, 11, 10]
我发现如果我做一些乱七八糟的事情,我可以在 Android 和 iOS 上获得相同的数据:
const secondSort = sorted.sort((a,b) => (b.value-a.value));
const thirdSort = secondSort.sort((a,b) => (b.value-a.value));
const fourthSort = thirdSort.sort((a,b) => (b.value-a.value));
所以看起来第一个排序实际上并没有完全排序我的大型数据集。
还有其他人看到过这种行为吗?或者是否有一种蛮力的方式来确保我不需要将几个排序函数串在一起?
【问题讨论】:
-
什么时候输出值?
-
我不确定我是否遵循。我需要将变量
sorted从最大到最小排序,然后将sorted变量用于ListView。像 Android 中的魅力一样工作。我肯定在 iOS 中得到了一个渲染的 ListView,但它没有正确排序。 -
sorted是您直接在模板中绑定的实例级属性吗? -
是的。在 html 中,它看起来类似于
<ListView [items]="sorted"></ListView>
标签: typescript sorting nativescript