根据字符串中的字符对字符串数组进行排序

时间:2016-10-01 01:03:33

标签: javascript arrays string

我正在尝试根据每个字符串中的字符对字符串数组进行排序。到目前为止,我有这个

function doMath(s) {

  let arr = s.split(' ');
  let letterArr = [];
  let sortedArr = [];
  let n = 0;
  for (var i = 0; i < arr.length; i++) {

    n = arr[i].indexOf(arr[i].match(/[a-z]/i));
    letterArr.push(arr[i][n]);

  }
  letterArr.sort();

  console.log(letterArr);

  for (i = 0; i < arr.length; i++) {
    for (var j = 0; j <= arr[i].length; j++) {

      if (arr[i].indexOf(letterArr[j]) > -1) {
        sortedArr.unshift(arr[i]);
      }

    }
  }
  console.log(sortedArr);
}

doMath("24z6 1x23 y369 89a 900b");

记录此数组时会显示问题。如果我使用sortedArr.push(arr[i]);, 然后输出是:

["24z6", "1x23", "y369", "89a", "900b"]

但是,当我使用sortedArr.unshift(arr[i]);时,我得到了输出:

["900b", "89a", "y369", "1x23", "24z6"]

我不确定为什么b出现在a之前。

我只想让它成为排序的a-z。我尝试了push()并且它是正确的但是向后(z-a)。当我尝试unshift()时,除了ba切换之外,它是正确的。

1 个答案:

答案 0 :(得分:6)

function doMath(s) {
   return s.split(' ').sort(function (a,b) {
      return a.match(/[a-z]/i)[0].localeCompare(b.match(/[a-z]/i)[0])})
}

console.log(doMath("24z6 1x23 y369 89a 900b"));