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,嗨,我想根据字符串中的数字对字符串进行排序 e、 g 1.1.2 13.1.2.1.act3 2.1.4.act56 1.3.1 3.1.3.args 13.1.3.4.acr 我想在某种程度上解释这一点 1.1.2 1.3.1 2.1.4.act56 3.1.3.args 13.1.2.1.act3 13.1.3.4.1 如何在javascript中实现它?您可以使用带有自定义迭代器函数的数组方法。e、 g: mylist = ["1.1.act2", "13.1.2.1.act3",

嗨,我想根据字符串中的数字对字符串进行排序 e、 g

  • 1.1.2
  • 13.1.2.1.act3
  • 2.1.4.act56
  • 1.3.1
  • 3.1.3.args
  • 13.1.3.4.acr
我想在某种程度上解释这一点

  • 1.1.2
  • 1.3.1
  • 2.1.4.act56
  • 3.1.3.args
  • 13.1.2.1.act3
  • 13.1.3.4.1

如何在javascript中实现它?

您可以使用带有自定义迭代器函数的
数组
方法。e、 g:

mylist = ["1.1.act2", "13.1.2.1.act3", "2.1.4.act56", "1.3.actorg", "3.1.3.args", "13.1.3.4.acr"];

mylist.sort(function(a, b) {
    a = a.split("."); b = b.split(".");
    var parts = Math.min(a.length, b.length);
    for(var i = 0; i < parts; ++i) {
        var numA = parseInt(a[i]); var numB = parseInt(b[i]);
        if (numA != numB)
            return numA > numB;
    }
});
mylist=[“1.1.act2”、“13.1.2.1.act3”、“2.1.4.act56”、“1.3.actorg”、“3.1.3.args”、“13.1.3.4.acr”];
mylist.sort(函数(a,b){
a=a.拆分(“.”);b=b.拆分(“.”);
变量部分=数学最小值(a.长度,b.长度);
对于(变量i=0;inumB;
}
});

这是一个未经测试的存根,但我想你看到了我的方向了

试试这个。这段代码没有经过优化,但可以正常工作

    <script type="text/javascript">
function fnc()
{
    var arr=new Array();
arr[0]="1.1.act2";
arr[1]="13.1.2.1.act3";
arr[2]="2.1.4.act56";
arr[3]="1.3.actorg";
arr[4]="3.1.3.args";
arr[5]="13.1.3.4.acr";

var it0=arr[0].split(".");
var it1=arr[1].split(".");
var it2=arr[2].split(".");
var it3=arr[3].split(".");
var it4=arr[4].split(".");
var it5=arr[5].split(".");

var newarr=new Array();
newarr[0]=parseInt(it0[0],10);
newarr[1]=parseInt(it1[0],10);
newarr[2]=parseInt(it2[0],10);
newarr[3]=parseInt(it3[0],10);
newarr[4]=parseInt(it4[0],10);
newarr[5]=parseInt(it5[0],10);

newarr.sort(function(a,b){return a-b});
alert(newarr);
for(i=0;i<arr.length;i++)
{

    if(newarr[i]==it0[0])
    {console.log(arr[0]);}
    else if(newarr[i]==it1[0])
    {console.log(arr[1]);}
    else if(newarr[i]==it2[0])
    {console.log(arr[2]);}
    else if(newarr[i]==it3[0])
    {console.log(arr[3]);}
    else if(newarr[i]==it4[0])
    {console.log(arr[4]);}
    else if(newarr[i]==it5[0])
    {console.log(arr[5]);}
    else if(newarr[i]==it6[0])
    {console.log(arr[6]);}
}
}
<input type="button" onclick="fnc()" value="click" />

函数fnc()
{
var arr=新数组();
arr[0]=“1.1.act2”;
arr[1]=“13.1.2.1.行动3”;
arr[2]=“2.1.4.act56”;
arr[3]=“1.3.actorg”;
arr[4]=“3.1.3.args”;
arr[5]=“13.1.3.4.acr”;
var it0=arr[0]。拆分(“.”);
var it1=arr[1]。拆分(“.”);
var it2=arr[2]。拆分(“.”);
var it3=arr[3]。拆分(“.”);
var it4=arr[4]。拆分(“.”);
var it5=arr[5]。拆分(“.”);
var newarr=新数组();
newarr[0]=parseInt(it0[0],10);
newarr[1]=parseInt(it1[0],10);
newarr[2]=parseInt(it2[0],10);
newarr[3]=parseInt(it3[0],10);
newarr[4]=parseInt(it4[0],10);
newarr[5]=parseInt(it5[0],10);
sort(函数(a,b){返回a-b});
警报(newarr);

对于(i=0;i您可以使用中的答案为
array.sort()构建
compare
函数)
这只适用于第一个数字,并且只适用于6个条目。显然,它只适用于6个条目。我已经展示了过程。你不应该期望我完成整个过程。复制并粘贴,然后看看它是如何工作的。不加评判就投反对票比较容易。这是一个非通用的解决方案。如果你明确地访问每个值,你可以通过交换它们来对它们进行排序。您所说的非泛型解决方案是什么意思。我工作得很好。您需要做的是首先将项目推入数组。您是否尝试过我的代码?尝试一下,然后查看firebug@polin:我相信您的代码适用于给定的数据集。但从某种意义上讲,它不是通用的,您可以在以下任何类型的数据上使用它对于手头的任务,代码非常冗长。“不加评判就投反对票更容易。”-我确实非常彻底地检查了您的代码,请放心,但它只是缺乏实用性。