Javascript/JQuery-按数组的分割部分排序?
我想按数组的分割部分对数组进行排序Javascript/JQuery-按数组的分割部分排序?,javascript,jquery,Javascript,Jquery,我想按数组的分割部分对数组进行排序 example_array = ["Zebra:Add","Pay:Cold","And:Vets","Jam:Back"] 我想这样分类: console.log(code here) // prints ["Zebra:Add","Jam:Back","Pay:Cold","And:Vets"] 注:我想“斑马:添加”,“支付:冷”等留在一起。我只想按照你对这个问题的评论中“:”后面的文本进行排序: 我甚至想不出解决办法 把问题分解成小块。您希望按数组
example_array = ["Zebra:Add","Pay:Cold","And:Vets","Jam:Back"]
我想这样分类:
console.log(code here) // prints ["Zebra:Add","Jam:Back","Pay:Cold","And:Vets"]
注:我想“斑马:添加”,“支付:冷”等留在一起。我只想按照你对这个问题的评论中“:”后面的文本进行排序: 我甚至想不出解决办法 把问题分解成小块。您希望按数组中字符串的一部分对数组进行排序,因此需要找出/查看
sort
方法)Array#sort
字符串#indexOf
找到:
,然后使用子字符串
获取它后面的所有字符。您可以拆分:
上的字符串,然后使用后半部分(如果您知道字符串中不会有多个:
)。或者可以使用正则表达式来隔离第一个:
之后的所有内容
例如,someString.match(/:.*$/)[0]
隔离以第一个:
开头的所有字符。(包括:
是无害的,但是如果不想包括它,可以使用.substring(1)
。)
Re#3:Array#sort
期望其回调返回负数(如果第一个参数在第二个参数之前),0
(如果它们的顺序无关紧要),或者返回正数(如果第二个参数在第一个参数之前)String#localeCompare
根据当前区域设置比较字符串并准确返回该信息,因此我们希望使用该信息
Re#4:Array#sort
接受回调函数,因此您可以在该回调中执行所有字符串拆分和比较。但是,由于回调将被重复调用,通常第一个或第二个参数是之前已经检查过的参数,因此对于较大的数组来说,这样做可能效率低下。提前进行所有字符串拆分/隔离,然后进行排序,然后获得所需的结果,这可能更有意义
因此:
不是特别有效的方法(对于像小数组这样的数据集很好)是在排序回调中隔离要排序的部分:
var array = ["Zebra:Add","Pay:Cold","And:Vets","Jam:Back"];
array.sort(function(left, right) {
return left.match(/:.*$/)[0].localeCompare(right.match(/:.*$/)[0]);
});
var数组=[“斑马:添加”、“支付:寒冷”、“和:兽医”、“果酱:返回”];
array.sort(函数(左、右){
返回left.match(/:.*$/)[0]。localeCompare(right.match(/:.*$/)[0]);
});
console.log(数组)代码>我喜欢前面答案的简单性,相比之下,我的方法可能太罗嗦了!但这是
1.)获取原始数组并从中构建一个新的排序数组,JSON数组中的每个对象都有一个text1和text2值。。。我们将根据文本2的值进行排序
2.)根据text2值运行排序
3.)清空原始数组
4.)循环排序数组并重新填充原始数组
这里有一个
//正在启动数组。我们想按冒号后面的文本排序
示例_数组=[“斑马:添加”、“支付:寒冷”、“和:兽医”、“果酱:背”];
//用于构建JSON数组的空数组,根据所需文本字符串进行排序
排序_数组=[];
//循环遍历原始数组并将新对象推送到排序数组
//每个对象都包含一个TEXT1值和一个TEXT2值
$.each(示例_数组、函数(i、val){
排序数组.push({“text1”:val.split(':')[0],“text2”:val.split(':')[1]})
})
//按TEXT2值对排序数组进行排序
排序\数组.排序(函数(a,b){
如果(a.text2'+val+'');
})
将匿名比较函数放入方法参数中。@guradio,还没有。我甚至想不出一个解决方案。当然,如果你想不出一个解决方案,或者一个开始的地方,也许你需要上课或使用教程。谢谢这与我使用160多个不同字符串的数组完美配合!
// STARTING ARRAY. WE WANT TO SORT BY THE TEXT AFTER THE COLON
example_array = ["Zebra:Add", "Pay:Cold", "And:Vets", "Jam:Back"];
// AN EMPTY ARRAY TO BUILD A JSON ARRAY FROM, THE SORT FROM THE DESIRED TEXT STRING
sorting_array = [];
// LOOP THROUGH THE ORIGINAL ARRAY AND PUSH A NEW OBJECT TO THE SORTING ARRAY
// EACH OBJECT CONTAINS A TEXT1 VALUE AND A TEXT2 VALUE
$.each(example_array, function(i, val){
sorting_array.push({"text1": val.split(':')[0], "text2": val.split(':')[1]})
})
// SORT THE SORTING ARRAY BY THE TEXT2 VALUE
sorting_array.sort(function(a, b){
if (a.text2 < b.text2) return -1;
if (b.text2 < a.text2) return 1;
return 0;
});
// EMPTY OUR ORIGINAL ARRAY
example_array = [];
// FOR DEMO PURPOSES LETS DISPLAY EACH IN THE DOM IN A UL ,
// AND ALSO RE-POPULATE THE ORIGINAL ARRAY WITHT HE NEW ORDER
$.each(sorting_array, function(i, val){
example_array.push(val.text1+':'+val.text2)
})
// TO SHOW THE NEW ORDER, LETS LOOP BACK OVER THE EXAMPLE_ARRAY
$.each(example_array, function(i, val){
$('ul').append('<li>' + val+ '</li>');
})