[英]Sorting alphabets within a string
我有一对字符串:
JAY, ROB
有没有javascript的方法,我可以从这两个单词创建一个新单词,其中前面的字母总是大于等于下一个(例如A大于B)
例如,在上面的字符串中,我想比较JAY
的第一个字母和ROB
的第一个字母。 由于J
与R
相比首先出现,因此新单词的第一个字母将是J
比较第二个,因为A
在R
之前变为第二个字母,第三个字母同样变为R
所以最后一句话就是JAROBY
我不知道如何处理这个问题。 我在想是否可以以sort
方式使用sort
功能,但无法理解如何。
我正在尝试类似的东西:
var a = `JAY,ROB`;
var sorted = a.split(",").sort()
var firstLetter = sorted[0][0];
注意:可能不止一对。 例如, JAY, ROB, APPLE, AAKO
我从输入字中制作两个数组,并使用循环。 在每次迭代时,检查第0个索引处的数组的值是否为第一个,如果是,则将其shift
(从数组中删除)并将其与输出字符串连接:
const input = 'JAY, ROB'; const [arr1, arr2] = input.split(', ').map(word => [...word]); let output = ''; while (arr1.length || arr2.length) { if (arr2.length && arr1[0] > arr2[0]) { output += arr2.shift(); } else { output += arr1.shift(); } } console.log(output);
或者,对于任意数量的单词:
const input = 'APPLE, JUICE'; const arrOfArrs = input.split(', ').map(word => [...word]); let output = ''; while (arrOfArrs.some(arr => arr.length)) { const firstLetters = arrOfArrs.map(arr => arr[0] || ''); const lowestChar = firstLetters.reduce((a, b) => b && (b < a || !a) ? b : a); const indexOfWordWithLowestStartingChar = firstLetters.indexOf(lowestChar); output += arrOfArrs[indexOfWordWithLowestStartingChar].shift(); } console.log(output);
这是一个可以适用于任何大小的字符串的答案。 这是一个“简单”的答案,当然不是最优化的,但任何人都可以轻松理解。
var a = `JAY,ROB,APPLE,AAKO`; var nbOfLetters = a.replace(/,/g, "").length; let result = ""; var sorted = a.split(",").sort(specialSort); while (result.length < nbOfLetters) { result += sorted[0][0]; sorted[0] = sorted[0].slice(1); sorted = sorted.sort(specialSort); } console.log("result", result); function specialSort(a, b) { if(a === "" || a === null) return 1; if(b === "" || b === null) return -1; if(a === b) return 0; return a < b ? -1 : 1; }
多字符串的解决方案。
function getSorta(string) { var iterators = string.split(', ').map(s => { var i = [...s][Symbol.iterator](); return [i.next(), i] }), result = ''; do { iterators.sort((a, b) => a[0].done - b[0].done || (a[0].value || '').localeCompare(b[0].value || '')); console.log(...iterators.map(([{ value }]) => value || ' ')); result += iterators[0][0].value; iterators[0][0] = iterators[0][1].next(); } while (!iterators.every(([{ done }]) => done)) return result; } console.log(getSorta('JAY, ROB')); console.log(getSorta('JAY, ROB, APPLE, MOON, AAKKO'));
.as-console-wrapper { max-height: 100% !important; top: 0; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.