对于包含大量数字的超大型阵列,Array.Sort在Nativescript IOS上无法正常工作

编程入门 行业动态 更新时间:2024-10-11 15:21:42
本文介绍了对于包含大量数字的超大型阵列,Array.Sort在Nativescript IOS上无法正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

因为我使用的是Nativescript,所以我在Android和iOS上使用相同的打字脚本代码。

我有一个非常大的数据集,其中包含大约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));

因此,第一个排序实际上并没有对我的大型数据集进行完全排序。

其他人见过这种行为吗?或者有没有一种暴力方式来确保我不需要将几个排序函数串在一起?

推荐答案

请看一下:

https://stackoverflow/a/15507922

似乎WebKit(NativeScript使用,与Safari相同)不能很好地处理这种排序,因此您可以通过执行以下操作来获得更好的结果:

myArray.sort(function(a,b){
  return (b.date > a.date) ? 1 : (b.date < a.date) ? -1 : 0;
});

我们已经遇到过类似的情况。在我们的例子中,是Date对象在您更改它之后具有错误的时区,我们必须使用Moment.js来解决它……‘\_(ツ)_/’

这篇关于对于包含大量数字的超大型阵列,Array.Sort在Nativescript IOS上无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

更多推荐

[db:关键词]

本文发布于:2023-03-13 18:04:40,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/621984.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:阵列   无法正常   数字   工作   IOS

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!