Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript数组长度>10排序google chrome_Javascript_Arrays_Google Chrome_Sorting - Fatal编程技术网

javascript数组长度>10排序google chrome

javascript数组长度>10排序google chrome,javascript,arrays,google-chrome,sorting,Javascript,Arrays,Google Chrome,Sorting,当我按任何列对对象数组进行排序时,它工作正常。。。直到我的数组长度>10。。。在google chrome上,firefox仍然运行良好 编辑:当数组长度超过10时,问题是排序只是对数组进行随机排序 所以我检查了排序函数是否返回了有效的0、负整数或正整数,是的,它们返回了 在返回之前,我通过执行一个简单的console.log来检查这一点 console.log(a.wins - b.wins); // when comparing integers console.log(a.name.loc

当我按任何列对对象数组进行排序时,它工作正常。。。直到我的数组长度>10。。。在google chrome上,firefox仍然运行良好

编辑:当数组长度超过10时,问题是排序只是对数组进行随机排序

所以我检查了排序函数是否返回了有效的0、负整数或正整数,是的,它们返回了

在返回之前,我通过执行一个简单的console.log来检查这一点

console.log(a.wins - b.wins); // when comparing integers
console.log(a.name.localeCompare(b.name, undefined, {sensitivity: 'base'})); // when comparing strings
我在控制台中的输出对于字符串比较只有数字-1、0或1,对于整数比较只有数字-5到140

有什么办法解决我的问题吗

EDIT2:好吧,让我们试着写一些代码,下面是我比较用户名时的代码

调用上面的函数后,我希望我的召唤者数组按这种方式排序

summoners = [
    {'username' : 'azerty', 'age' : 2},
    {'username' : 'bob', 'age' : 5},
    {'username' : 'calpton', 'age' : 19},
    {'username' : 'comics', 'age' : 12},
    {'username' : 'hello', 'age' : 17}, // it doesn't matter
    {'username' : 'hello', 'age' : 37}, // for these ones
    {'username' : 'henry', 'age' : 17},
    {'username' : 'newyork', 'age' : 47},
    {'username' : 'physics', 'age' : 14},
    {'username' : 'therapy', 'age' : 27},
    {'username' : '', 'age' : 1},
];
但我会得到:

summoners = [
    {'username' : 'calpton', 'age' : 19},
    {'username' : 'bob', 'age' : 5},
    {'username' : 'hello', 'age' : 37},
    {'username' : 'henry', 'age' : 17},
    {'username' : 'comics', 'age' : 12},
    {'username' : 'hello', 'age' : 17},
    {'username' : 'newyork', 'age' : 47},
    {'username' : 'physics', 'age' : 14},
    {'username' : '', 'age' : 1},
    {'username' : 'azerty', 'age' : 2},
    {'username' : 'therapy', 'age' : 27}
];
所以,我猜它不是随机的,因为它总是这样排序,但排序毫无意义

EDIT4:不,用户名不返回未定义的

我在一个班级里

最终编辑:好的,我发现了问题所在,问题是我的数组是一个复杂的对象数组,我试图按属性对它进行排序,但有时,11个对象中有7个具有相同的属性值。我在chrome中遇到的问题是,google chrome并不总是按照相同的顺序对相等的值进行排序,而firefox总是保持相同的顺序。在Edit2下面的代码中,我检查数组是否已经排序,如果是,我将其反转,它在firefox中运行良好,因为它始终是相同的,在chrome中则不是。我仍然不明白它怎么会把最初的排序搞砸,但是,我只是在一个我知道是唯一的属性上添加了第二个排序,它解决了所有问题

return first.localeCompare(second, undefined, {sensitivity: 'base'}) || a.name.localeCompare(b.name, undefined, {sensitivity: 'base'});

名称始终存在且唯一,因此我的数组将始终以相同的方式排序。

我在Chrome v51中做了如下操作,结果与预期一致

var召唤者=[ {'username':'calpton','age':19}, {'username':'漫画','age':12}, {'username':'hello','age':17}, {'username':'newyork','age':47}, {'username':'physics','age':14}, {'username':,'age':1}, {'username':'azerty','age':2}, {'username':'bob','age':5}, {'username':'hello','age':37}, {'username':'henry','age':17}, {'username':'therapy','age':27} ], sorted=callers.sorta,b=>{var f=a.username | | zzz, s=b.username | | zzz; 返回f.localeCompares,void 0,{sensitivity:base}; };
console.logsorted;你能发布一段代码来直接说明你的问题吗?到目前为止,你还没有描述这个问题。有什么问题吗?它返回未定义的?它返回一个空数组?它没有排序?如果它没有排序,你确定它没有排序根本没有改变,还是按意外的顺序排序?抱歉@slebetman,我编辑了我的帖子来回答你的问题。如果没有样本数据和使用代码的上下文,我们就无法重现您仍然没有描述问题。通过随机方式,我假设它有时将[3,2,1]排序为[1,3,2],有时排序为[3,1,2]等等。我们无法回答这个问题,因为我们不知道您在说什么。谢谢。我对你的答案投了赞成票,但我无法验证它,因为它不是我问题的解决方案,但你让我一次又一次地尝试,所以我发现了问题所在,准备编辑我的帖子来展示它。@Pinepple34:酷。。我对解决办法很好奇。让我们知道问题出在哪里。
summoners = [
    {'username' : 'calpton', 'age' : 19},
    {'username' : 'bob', 'age' : 5},
    {'username' : 'hello', 'age' : 37},
    {'username' : 'henry', 'age' : 17},
    {'username' : 'comics', 'age' : 12},
    {'username' : 'hello', 'age' : 17},
    {'username' : 'newyork', 'age' : 47},
    {'username' : 'physics', 'age' : 14},
    {'username' : '', 'age' : 1},
    {'username' : 'azerty', 'age' : 2},
    {'username' : 'therapy', 'age' : 27}
];
get Username(){
    if (typeof this.username == 'undefined')
        return '';
    else return this.username;
}
return first.localeCompare(second, undefined, {sensitivity: 'base'}) || a.name.localeCompare(b.name, undefined, {sensitivity: 'base'});