首页 > 解决方案 > 如何编写一个对字符串中的帐号进行排序的Javascript函数?

问题描述

编写一个函数,对字符串中的帐号进行排序,并返回一个排序后的帐号字符串。还要删除重复项并在原始 bankNumber ex 的末尾添加重复项的数量:

12455 1435 5
 12455 1435 5

将会:

12455 1435 52

例子:

 var input = `2
 5
 12455 1435 5
 12455 1435 5
 23454 3554 5 
 12344 1435 30
 12344 1435 30

 2
 41234 5451 9 
 13451 5151 5
 `;

output = "2
 5
 12344 1435 302
 12455 1435 52
 23454 3554 5 

 2
 13451 5151 5
 41234 5451 9 
 "

我已使用 split("\n") 将字符串拆分为一个数组。并使用 for 循环和 sort() 对数组进行排序。主要是很难让它对两个交易进行排序。

谢谢。

这是我到目前为止所拥有的:

function sort(a) {
  let totalTests = a.slice(0, 1);
  let newString = a.slice(2);
  let arr = newString.split("\n");
  let tempBankNumbers = 0;

  let multiArr = [];
  let arr2 = [1]
  let tempBankNumberAmount = arr2.splice(0, 1);
  let totalTestsInt = parseInt(totalTests);

    for(let i = 0; i < totalTestsInt -1 ; i++)
  {
    let arrayTemp = arr.splice(0, arr.indexOf(""))
   multiArr[i] = (arrayTemp)
  }
  arr2.sort();

  var tempBankNumber = "";

  let returnArray = [];
  returnArray.push(tempBankNumberAmount[0]);

  for (let i = 0; i < arr2.length; i++) {
    tempBankNumber = arr2[i];
    let numberOfAccounts = 1;

    for (let j = i + 1; j < arr2.length; j++) {
      if (arr2[i] == (arr2[j])) {

        arr2[i] = arr2[i].concat(++numberOfAccounts)
        arr2.splice(j, 1)
      }
    }
  }
  arr2.unshift(tempBankNumberAmount[0])
  return a; 
}

标签: javascriptarraysstringsorting

解决方案


我已经对它的工作方式发表了评论。我假设它们应该仅基于原始值进行词法排序,而不是基于附加的字符串。
使用对象映射来跟踪重复计数,然后展开对象映射。

var input = `2
 5
 12455 1435 5
 12455 1435 5
 23454 3554 5 
 12344 1435 30
 12344 1435 30

 2
 41234 5451 9 
 13451 5151 5
 `;

const [t, ...split] = input.split(/\s*\n+\s*/)

const r = [], rn = []
let n
while (n = split.shift()) {
  rn.push(n)
  r.push(
    Object.entries(
      // sort first
      split.splice(0, +n).sort()
        // increment object map count value
        .reduce((a, x) => (a[x] = (a[x] || 0) + 1, a), {}))
     // append count if > 1
    .map(([k, v]) => `${k}${v>1?v:''}`))
}

// concat the input count numbers in the input and join result array
console.log(t+'\n'+r.map((x,i)=>`${rn[i]}\n${x.join('\n')}`).join('\n'))


推荐阅读