Javascript 对通过查询字符串接收的数字字符串进行排序

Javascript 对通过查询字符串接收的数字字符串进行排序,javascript,Javascript,对于我的应用程序,我通过查询字符串传入一个数字字符串,并希望找到所有数字的中间值。当处理实际数字时,这项任务非常简单,但考虑到我试图找到数字字符串的中值,我必须将字符串转换为数组,对其排序,将NUM转换为整数等。如何实现这一结果?以下是我如何实现这一目标的: let nums = req.query let numArr = undefined for(let x in nums) { strX = nums[x].replace(/,/g, '').split('

对于我的应用程序,我通过查询字符串传入一个数字字符串,并希望找到所有数字的中间值。当处理实际数字时,这项任务非常简单,但考虑到我试图找到数字字符串的中值,我必须将字符串转换为数组,对其排序,将NUM转换为整数等。如何实现这一结果?以下是我如何实现这一目标的:

 let nums = req.query
 let numArr = undefined

    for(let x in nums) {
        strX = nums[x].replace(/,/g, '').split('').sort();
        numArr = strX.map(x => parseInt(x))
    }
此方法不适用于示例,例如
'5,7,9,1,12'
,因为它按如下方式对数组排序
[1,1,2,5,7,9]
您应该执行以下操作:

让nums=req.query
设numArr=未定义
for(设x为nums){
strX=nums[x].split(',).map(x=>parseInt(x)).sort((x,y)=>x-y);
}
然而,我认为这个循环是多余的,尽管我还没有测试过它。 也就是说,你能做到

让nums=req.query
设nummarr=nums.split(“,”).map(x=>parseInt(x)).sort((x,y)=>x-y);
您应该这样做:

让nums=req.query
设numArr=未定义
for(设x为nums){
strX=nums[x].split(',).map(x=>parseInt(x)).sort((x,y)=>x-y);
}
然而,我认为这个循环是多余的,尽管我还没有测试过它。 也就是说,你能做到

让nums=req.query
设nummarr=nums.split(“,”).map(x=>parseInt(x)).sort((x,y)=>x-y);

您可以将字符串作为JSON字符串的一部分,获取一个数字数组,根据数组的长度对其进行排序并获取中值

const
字符串='5,7,9,1,12',
array=JSON
.parse(`[${string}]`)
.sort((a,b)=>a-b),
中位数=数组长度%2
? 数组[array.length>>1]
:(数组[(array.length>>1)-1]+数组[array.length>>1])/2;
log(…数组);

控制台日志(中位数)您可以将字符串作为JSON字符串的一部分,获取一个数字数组,根据数组的长度对其进行排序并获取中值

const
字符串='5,7,9,1,12',
array=JSON
.parse(`[${string}]`)
.sort((a,b)=>a-b),
中位数=数组长度%2
? 数组[array.length>>1]
:(数组[(array.length>>1)-1]+数组[array.length>>1])/2;
log(…数组);

控制台日志(中位数)Array.sort的默认行为是将项作为UTF16字符串进行比较。但是您可以通过使用比较函数来覆盖该行为


'5,7,9,1,12'。拆分(',).map(n=>parseInt(n,10)).sort((a,b)=>a-b)
数组的默认行为。sort是将项作为UTF16字符串进行比较。但是您可以通过使用比较函数来覆盖该行为



'5,7,9,1,12'。拆分(',).map(n=>parseInt(n,10)).sort((a,b)=>a-b)

1。
req.query
是一串数字(例如
5,7,9,1,12
)吗?2.您正在为每个数字覆盖
numArr
,这似乎不是您想要做的。您是否打算将
numArr
转换为整数的数字字符串?当您替换逗号时,结果是“579112”。将其除以“”时,结果为“5,7,9,1,1,2”。1。
req.query
是一串数字(例如
5,7,9,1,12
)吗?2.您正在为每个数字覆盖
numArr
,这似乎不是您想要做的。您是否打算将
numArr
转换为整数的数字字符串?当您替换逗号时,结果是“579112”。当您将其除以“”时,结果是“5,7,9,1,1,2”。应该在
.map()
之后执行
.sort()
,因为
[“1”、“2”、“12”]
将在字符串表示形式中排序为
[“1”、“12”、“2”]
,这应该是数字形式的
[1、2、12]
。不,您是对的,根据@Nina Scholz的评论,我修改了它,
sort()
函数将按字符串字典顺序排序,因此自定义比较器
。需要排序((x,y)=>x-y)
应该在
之后执行
。sort()
.map()
,因为
[“1”、“2”、“12”
将被排序为
[“1”、“12”、“2”]
在它们的字符串表示形式中,就像它们的数字形式一样。
[1,2,12]
不,你是对的,我更改了它+根据@Nina Scholz的注释,
sort()函数将按字符串字典顺序排序,因此自定义比较器
.sort((x,y)=>x-y)
是否需要字符串包含重复的数字?@GirkovArpa,如果一个数字出现多次,则获取媒体并不重要。自定义排序比较器函数是多余的,因为数字的
sort()
默认行为是按升序排序。@AnsonMiu,否,因为不带回调的函数对字符串进行排序,所以您得到的是11<2,这是不需要的。如果字符串包含重复的数字怎么办?@GirkovArpa,如果一个数字出现多次,则获取媒体并不重要。自定义排序比较器函数作为
sort()的默认行为是多余的
对数字的排序是按升序进行的。@AnsonMiu,不,因为不带回调对字符串进行排序,所以得到11<2,这是不需要的。为什么
n=>parseInt(n,10)
而不是
Number
,甚至只是
n=>+n
?只要数组不包含无穷大或NaN,就可以了。因为+n是一个技巧。parseInt是显式的。为什么
n=>parseInt(n,10)
而不是
Number
或者甚至只是
n=>+n
?只要数组不包含无穷大或NaN,就可以了。因为+n是一个技巧。parseInt是显式的。