Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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_Arrays_Regex_Sorting - Fatal编程技术网

Javascript 如何根据字符串中的数字对数组排序?

Javascript 如何根据字符串中的数字对数组排序?,javascript,arrays,regex,sorting,Javascript,Arrays,Regex,Sorting,给定此数组=[“3ab1”、“2a0”、“1abc2”] 如何将其排序为[“1abc2”、“3ab1”、“2a0”](最后一个数字的降序) 并返回[1,3,2]。(每学期的第一个数字) 当最后一个数字和下一个最后一个数字不连续时,返回的值应为0 [“2x2”、“3x0”、“2x1”]==>[2,2,3] [“22x0”、“3x9”、“2x1”]=>[3,0,0,0,0,0,2,22] [“2x4”,“3x0”]=>[2,0,0,3] [“axn”,“bx(n-2)”]==>[“axn”,“0x(

给定此数组=
[“3ab1”、“2a0”、“1abc2”]

如何将其排序为
[“1abc2”、“3ab1”、“2a0”]
(最后一个数字的降序)

并返回
[1,3,2]
。(每学期的第一个数字)

当最后一个数字和下一个最后一个数字不连续时,返回的值应为0

[“2x2”、“3x0”、“2x1”]==>[2,2,3]

[“22x0”、“3x9”、“2x1”]=>[3,0,0,0,0,0,2,22]

[“2x4”,“3x0”]=>[2,0,0,3]

[“axn”,“bx(n-2)”]==>[“axn”,“0x(n-1)”,bx(n-2)]==>[a,0,b]

我正在考虑将数组转换为字符串,替换前面的数字和字母,然后对数组进行排序。但我不知道如何将更换的零件恢复到原来的编号。这是我在排序后返回最终数组的尝试

var-ari=[“1abc2”、“3ab1”、“2a0”];

console.log(((ary.toString()).match(/\d+(?!,)/g)).slice(0,-1))您的问题有点奇怪,但您可以使用
map
parseInt
实现这一点:

var arr=[“1abc2”、“3ab1”、“2a0”];
var res=arr.map(函数(i){
返回parseInt(i);
});

控制台日志(res)排序和映射的组合应该可以做到这一点

常量=[“1abc2”、“3ab1”、“2a0”]; 常量newarray=ary .排序((a,b)=>{ 返回a[a.length-1]{ 返回parseInt(a[0]); });
log(newarray)下面的脚本首先根据结束编号对数组进行降序排序,
然后只返回排序数组的起始编号

(我更改了数组中的数字,以显示它们可以超过一位数。)

var数组=[“31ab12”、“20a40”、“11abc27”];
array.sort(函数(a,b){
函数getEndNum(str){for(var i=str.length-1;i>=0;--i){if(isNaN(str.charAt(i)){return str.substring(i+1);}}}}//此函数返回所提供字符串的结束号
返回getEndNum(b)-getEndNum(a);//根据结束数对数组进行递减排序
});

log(array.map(函数(a){return parseInt(a);}))//创建一个仅包含起始编号的新数组
在使用
排序
减少
获取结果时,可以使用正则表达式获取编号:

var数组=[“22x0”、“3x9”、“2x1”];
var reS=//^\d+/,//regexp,用于获取字符串开头的所有数字
reE=/\d+$/;//用于获取字符串末尾的所有数字的regexp
var result=array.sort(函数(a,b){//First:对数组进行排序
a=reE.exec(a);//从字符串a中获取最后一个数字
b=reE.exec(b);//从字符串b中获取最后一个数字
返回b-a;//按降序排序
}).reduce(函数(res,str,i){//然后:累加结果数组
var gap=reE.exec(数组[i-1])-reE.exec(str);//计算此字符串str和最后一个字符串数组[i-1]之间的间距(gap=N_of_last_string-N_of_this_string)
if(间隙>0)//如果存在间隙
while(--gap)res.push(0);//然后用0填充它
res.push(+res.exec(str));//按此字符串编号
返回res;
}, []);
log(“排序数组:”,数组);//数组现在已排序

console.log(“结果:,结果);//结果包含数字
您的排序规则是什么,我无法识别模式?根据@myfunkyside后面的数字进行排序,然后返回前面的数字。这些数字都不超过一位数(例如“4ab12”或“23a0”)?逻辑是什么?(用英语解释)<代码>[“1x(n)”,“1x(n-2)”]=>[1(n中的一个),0(n-1中的一个)(因为没有(n-1项被认为是0)),1(n-2中的一个)]
@ibrahimmahrir。给定术语ax(n),如果下一个术语中的
n
的以下值不是(n-1),则为(n-1)返回的值应为0。如果第一个数字也可以是负数,我应该更改什么?@kaien只是第一个数字?更改为
var reS=/^-?\d+//code>!