Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.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 jQuery object.sort()未排序_Javascript_Jquery_Sorting - Fatal编程技术网

Javascript jQuery object.sort()未排序

Javascript jQuery object.sort()未排序,javascript,jquery,sorting,Javascript,Jquery,Sorting,我试图根据列表的值对其进行排序,但我不明白为什么一旦我更改了它,它就不起作用了 将a和b部分更改为ipArray[a/b.value]后,将对nothing进行排序 我可以确认ipArray中存在所有选项值,因为我可以使用selectList.each(function()获取这些值{ 警报(ipArray[$(this.val()].ipAdd) ) 编辑: 创造了一把小提琴 对于预期的输出您正在使用一个属性值进行排序,该属性甚至不存在于对象中 selectList.sort(function

我试图根据列表的值对其进行排序,但我不明白为什么一旦我更改了它,它就不起作用了

将a和b部分更改为ipArray[a/b.value]后,将对nothing进行排序

我可以确认ipArray中存在所有选项值,因为我可以使用
selectList.each(function()获取这些值{
警报(ipArray[$(this.val()].ipAdd)
)

编辑:

创造了一把小提琴
对于预期的输出

您正在使用一个属性
进行排序,该属性甚至不存在于
对象中

selectList.sort(function (a, b) {

     var _network = a.network.localCompare(b.network);
     var _ip  = a.ip.localCompare(b.ip);

     // Will first check network, if equal will then check IP
     return (_network==0?_ip:_network);    

});

只需一行代码:

它评估第一部分,如果网络相同,则评估另一部分

selectList.sort(function (a, b) {
    return a.network.localeCompare(b.network) || a.ipAdd.localeCompare(b.ipAdd);
});
算法运行正常,请参见下文。但是您的
selectList
确实包含一个对象,该对象不像您希望的那样可排序

var-ipArray=[];
功能添加(ip、网络){
push({ip:ip,network:network});
}
添加(“1.1.1.1”、“A”);
添加(“2.2.2.2”、“B”);
添加(“3.3.3.3”、“D”);
添加(“4.4.4.4”、“C”);
添加(“5.5.5.5”、“A”);
ipArray.sort(函数(a,b){
返回a.network.localeCompare(b.network)| | a.ip.localeCompare(b.ip);
});

document.write(“”+JSON.stringify(ipArray,0,4)+“”);
首先,请注意
a.value
是一个字符串。将其解析为int并从中减去1,然后将结果用作索引

最后,使用
localeCompare
对字符串进行排序,而不是进行减法

小提琴:


此外,您可能需要为sort函数添加更多的逻辑来处理tie(例如,当
a
b
都相等时,返回一个IP比较(这也需要对由点分隔的每个令牌进行适当的解析)).

您能提供更大的样本数据吗?选择列表中的预期对象是什么?您的样本对象与示例中提供的对象不同。添加了预期输出。尝试了此操作,但无效。因为选择列表中只有索引而没有对象本身,所以我不能仅使用.ip或.network。请粘贴您的选择列表I在原始帖子中。创建了一个提琴,看一看。尝试了这个方法,但没有效果。因为selectList只有索引而没有对象本身,所以我不能只使用.ip或.network。@Tim,您的对象
selectList
不可排序。因此在排序方法中无法使用a和B值从数组中获取对象?请写入函数a()中的e
alert(JSON.stringify(selectList,0,4));
。排序数据的引用应该不同。
selectList.sort(function (a, b) {
    return a.network.localeCompare(b.network) || a.ipAdd.localeCompare(b.ipAdd);
});