Javascript 从字符串中排序元素

Javascript 从字符串中排序元素,javascript,string,sorting,Javascript,String,Sorting,我有一根绳子 7条蛇 4辆自行车 2个芒果 它由数字+空格+字符串组成。我需要能够根据数字对整个字符串进行排序。所以应该说: 2个芒果 4辆自行车 7条蛇 这是一个简单的编号冒泡排序,然后交叉引用索引以获得最终顺序。下面的JavaScript代码可以工作,但我忍不住认为可以提高效率。我错过了一个技巧吗 记住:我是个艺术家,所以我用蜡笔编码 var eventsStr = "7 serpents\n4 bikes\n2 mangoes" var splitArr = eventsStr.s

我有一根绳子

  • 7条蛇
  • 4辆自行车
  • 2个芒果
它由数字+空格+字符串组成。我需要能够根据数字对整个字符串进行排序。所以应该说:

  • 2个芒果
  • 4辆自行车
  • 7条蛇
这是一个简单的编号冒泡排序,然后交叉引用索引以获得最终顺序。下面的JavaScript代码可以工作,但我忍不住认为可以提高效率。我错过了一个技巧吗

记住:我是个艺术家,所以我用蜡笔编码

var eventsStr = "7 serpents\n4 bikes\n2 mangoes"
var splitArr = eventsStr.split("\n")
var numArray = new Array();
var events = new Array();

for (var i = 0; i < splitArr.length; i++)
{
  var temp = splitArr[i] ;
  var part1 = temp.substring(0, temp.indexOf(" "))
  var part2 = temp.substring(temp.indexOf(" ")+1, temp.length)
  numArray[i] = part1;
  events[i] = part2;
}

var sorted = superCopy(numArray);
var sorted = sorted.sort(sortArrayNumerically);
alert(getOrder(sorted, numArray, events))


function getOrder(orderedarr, arr1, arr2)
{
  var str = "";
  for (var i = 0; i < arr1.length; i++)
  {
    for (var j = 0; j < orderedarr.length; j++)
    {
      if (arr1[i] == orderedarr[j]) 
      {
        // found the thing !what is the event?
        str += arr1[i] + " " + arr2[i] + "\n";
      }
    }
  }
  return str
}

function sortArrayNumerically(a,b)
{
    return a - b;
}

function superCopy(arr)
{
  tempArr = new Array();
  for (var i = 0; i < arr.length; i++)
  {
    tempArr[i] = arr[i]
  }
  return tempArr
}
var eventsStr=“7蛇\n4自行车\n2芒果”
var splitArr=eventsStr.split(“\n”)
var numArray=新数组();
var events=新数组();
对于(变量i=0;i
您可以使用JavaScript的功能:

eventsStr.split('\n').sort().join('\n');

  • eventsStr.split('\n')
    -首先拆分换行符上的字符串以创建数组
  • .sort()
    -然后使用
    sort()
    函数对数组进行排序
  • .join('\n')
    -然后将字符串放回一起,用换行符连接数组元素
参考:


但这是字母排序,因此如果字符串包含12个芒果,则结果不会按数字排序。要进行数字排序,可以执行以下操作:

eventsStr.split('\n').sort(function(a, b) {
    return parseInt(a.split(' ')[0], 10) > parseInt(b.split(' ')[0], 10);
}).join('\n');
在这种情况下,使用回调参数调用
sort()
函数,取两个值:要比较的第一个字符串和要比较的第二个字符串。然后,此回调函数拆分字符串,提取数字并将其与另一个字符串中的数字进行比较。

使用

splitArr.sort()   // as per your code
演示

var eventsStr = "7 serpents\n4 bikes\n2 mangoes"
arr = eventsStr.split('\n')
# ["7 serpents", "4 bikes", "2 mangoes"]
arr
# ["7 serpents", "4 bikes", "2 mangoes"]
arr.sort()
# ["2 mangoes", "4 bikes", "7 serpents"]
这更适合于