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

sou*_*aid 2 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");
Run Code Online (Sandbox Code Playgroud)

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

["24z6", "1x23", "y369", "89a", "900b"]
Run Code Online (Sandbox Code Playgroud)

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

["900b", "89a", "y369", "1x23", "24z6"]
Run Code Online (Sandbox Code Playgroud)

我不确定为什么b会在此之前发生a.

我只想把它作为排序的az.我试过push(),这是正确的,但倒退(za).当我尝试时unshift(),它是正确的,除了ba切换.

Kei*_*ith 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"));
Run Code Online (Sandbox Code Playgroud)

  • 哦,.我喜欢那样..我一直在做那4个空间缩进..:) (2认同)