繁体   English   中英

在字符串中对字母排序

[英]Sorting alphabets within a string

我有一对字符串:

JAY, ROB

有没有javascript的方法,我可以从这两个单词创建一个新单词,其中前面的字母总是大于等于下一个(例如A大于B)

例如,在上面的字符串中,我想比较JAY的第一个字母和ROB的第一个字母。 由于JR相比首先出现,因此新单词的第一个字母将是J 比较第二个,因为AR之前变为第二个字母,第三个字母同样变为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; } 

http://jsfiddle.net/1s9axLzu/

多字符串的解决方案。

 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM