Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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 如何从字符串的特定部分对列表进行数字排序_Javascript_Sorting - Fatal编程技术网

Javascript 如何从字符串的特定部分对列表进行数字排序

Javascript 如何从字符串的特定部分对列表进行数字排序,javascript,sorting,Javascript,Sorting,我有这个链接列表,当它们在我的页面上生成时,需要对它们进行排序 链接如下所示 ”https://www.dropbox.com/s/###/NF%208975%###" "https://www.dropbox.com/s/###/NF%207600%###" 然后,当它们被生成到我的页面上时,我通过它们进行映射,并根据链接末尾的内容创建一个名称(删除所有垃圾字符) 在不改变url的情况下,是否可以根据url末尾的内容对它们进行数字排序。这样,当我通过它们映射时,它们已经被订购了 像这样: N

我有这个链接列表,当它们在我的页面上生成时,需要对它们进行排序

链接如下所示

”https://www.dropbox.com/s/###/NF%208975%###"
"https://www.dropbox.com/s/###/NF%207600%###"

然后,当它们被生成到我的页面上时,我通过它们进行映射,并根据链接末尾的内容创建一个名称(删除所有垃圾字符)

在不改变url的情况下,是否可以根据url末尾的内容对它们进行数字排序。这样,当我通过它们映射时,它们已经被订购了

像这样:

NF%207600%###

NF%208975%####

我看过一些类似的SO问题,但似乎找不到足够的相关问题。

你可以
.map().sort().map()
。它可能看起来很笨重,但是如果你有很多URL,这会更有效,因为你不必每次比较一个URL和另一个URL时都执行数字解析正则表达式替换。例如,比较仅对5个URL排序时的调用量:

var数组=[
'https://www.dropbox.com/s/###/NF%208975%###',
'https://www.dropbox.com/s/###/NF%209213%###',
'https://www.dropbox.com/s/###/NF%205346%###',
'https://www.dropbox.com/s/###/NF%201764%###',
'https://www.dropbox.com/s/###/NF%207600%###'
];
函数getId(url){
返回编号(url.replace(/^.*%(\d+)%.*$/,“$1”);
}
函数计数(func){
函数包装器(){
wrapper.count++;
返回函数apply(这是参数);
}
wrapper.count=0;
返回包装器;
}
var countGetId=count(getId);
变量排序=数组
.map(url=>({url,编号:countGetId(url)}))
.sort((a,b)=>a.number-b.number)
.map(obj=>obj.url);
console.log('.map().sort().map()'))
控制台日志(已排序);
log('getId调用'+countGetId.count+'times');
var countGetId=count(getId);
var sorted=array.sort((a,b)=>countGetId(a)-countGetId(b))
console.log('.sort()'))
控制台日志(已排序);
log('getId调用'+countGetId.count+'times')您可以
.map().sort().map()
。它可能看起来很笨重,但是如果你有很多URL,这会更有效,因为你不必每次比较一个URL和另一个URL时都执行数字解析正则表达式替换。例如,比较仅对5个URL排序时的调用量:

var数组=[
'https://www.dropbox.com/s/###/NF%208975%###',
'https://www.dropbox.com/s/###/NF%209213%###',
'https://www.dropbox.com/s/###/NF%205346%###',
'https://www.dropbox.com/s/###/NF%201764%###',
'https://www.dropbox.com/s/###/NF%207600%###'
];
函数getId(url){
返回编号(url.replace(/^.*%(\d+)%.*$/,“$1”);
}
函数计数(func){
函数包装器(){
wrapper.count++;
返回函数apply(这是参数);
}
wrapper.count=0;
返回包装器;
}
var countGetId=count(getId);
变量排序=数组
.map(url=>({url,编号:countGetId(url)}))
.sort((a,b)=>a.number-b.number)
.map(obj=>obj.url);
console.log('.map().sort().map()'))
控制台日志(已排序);
log('getId调用'+countGetId.count+'times');
var countGetId=count(getId);
var sorted=array.sort((a,b)=>countGetId(a)-countGetId(b))
console.log('.sort()'))
控制台日志(已排序);
log('getId调用'+countGetId.count+'times')您可以使用正则表达式提取数字,然后用它进行比较:

var url=[”https://www.dropbox.com/s/###/NF%208975%###", "https://www.dropbox.com/s/###/NF%207600%###"]
函数提取_编号(url){
返回编号(url.replace(/.*%(\d+)%.*/,“$1”))
}
排序(函数(a,b){
if(摘录编号(a)<摘录编号(b)){
返回-1;
} 
if(摘录编号(a)>摘录编号(b)){
返回1;
} 
返回0;
})
日志(URL)您可以使用正则表达式提取数字,然后用它进行比较:

var url=[”https://www.dropbox.com/s/###/NF%208975%###", "https://www.dropbox.com/s/###/NF%207600%###"]
函数提取_编号(url){
返回编号(url.replace(/.*%(\d+)%.*/,“$1”))
}
排序(函数(a,b){
if(摘录编号(a)<摘录编号(b)){
返回-1;
} 
if(摘录编号(a)>摘录编号(b)){
返回1;
} 
返回0;
})

日志(URL)为什么自然排序不适合您?是否
####
指示它们是任意字符串的占位符?@PeterMader是的,不能包含整个链接,因为它包含敏感信息。我留下了我想按open排序的部分为什么自然排序不适合您?是否
####
指示它们是任意字符串的占位符?@PeterMader是的,不能包含整个链接,因为它包含敏感信息。我留下了我想按openHah排序的部分!我知道有人会发布这样的东西。。。对于许多URL,最好在
排序()之前预先计算所有
提取\u number()
s,这样,您只需对每个URL执行一次,而不是对每个URL执行一次日志(N)。对正则表达式不太熟悉,但数字可以位于任何字符串字符之后<例如,code>RF
是更多示例的另一个示例。我如何修改此解决方案?标识数字的模式是什么?这两个
%
s能否唯一地标识该号码?另一件事是,您可以简单地
返回extract\u number(a)-extract\u number(b)
,然后我的建议是列出您可以拥有的URL;识别模式并找出提取数字所需的正则表达式。如果你能发表评论,也许我能帮上忙。或者你可以发布一个关于正则表达式的不同问题。哈!我知道有人会发布这样的东西。。。对于许多URL,最好在排序()之前预先计算所有的
extract\u number()
s,这样您只需在