javascript - 如何编写一个对字符串中的帐号进行排序的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;
}
解决方案
我已经对它的工作方式发表了评论。我假设它们应该仅基于原始值进行词法排序,而不是基于附加的字符串。
使用对象映射来跟踪重复计数,然后展开对象映射。
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'))
推荐阅读
- openlayers - 以 IIIF 为源增加 OverviewMap 预览大小
- c - 如何处理实现堆栈的错误?
- reactjs - 如何处理 Typescript 中的 onChange
- typescript - 对象只能从 json 解析
- c++ - CMake + Ninja + Visual Studio Express 17:无法检查 C 和 CXX 编译器
- html - 根据内容获取元素的xpath
- xpages - 扩展库休息控制 Xpages
- sql-server - Polybase 连接本地 CSV 文件
- ocaml - 生成的折叠类型、迭代器和映射与 ppx_deriving 文档不一致
- if-statement - 是否有一个脚本可以检查列表中的链接并确定它们是否正常工作?