Javascript jQuery object.sort()未排序
我试图根据列表的值对其进行排序,但我不明白为什么一旦我更改了它,它就不起作用了 将a和b部分更改为ipArray[a/b.value]后,将对nothing进行排序 我可以确认ipArray中存在所有选项值,因为我可以使用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
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()中的ealert(JSON.stringify(selectList,0,4));
。排序数据的引用应该不同。
selectList.sort(function (a, b) {
return a.network.localeCompare(b.network) || a.ipAdd.localeCompare(b.ipAdd);
});