我有一个字母和数字数组。
let sortLetters =
[ 'R', '1', 'U', '1', 'N', '1', 'D', '1', 'M', '1', 'C', '1' ]
我想按字母顺序对类型进行排序,然后返回我遇到的第一个字母。
我的预期输出应该是C
。
目前我的代码对所有类型进行了正确排序,但如果我尝试过滤掉数字,它不会返回我需要的内容。任何帮助,不胜感激。
let sortLetters = [ 'R', '1', 'U', '1', 'N', '1', 'D', '1', 'M', '1', 'C', '1' ]
const sortBothType =(arr)=> {
return [...arr].sort((a, b) => a.localeCompare(b));
}
const getFirstLetter = (arr) =>{
let result = ''
for(let x = 0; x <= arr.length;x++){
if( parseInt(arr[x]) === 'string'){
return arr[x]
}
}
}
let sortedType = sortBothType(sortLetters)
sortedType
getFirstLetter(sortedType)
let finalResult = getFirstLetter(sortedType)
首先过滤掉所有数字,然后排序,最后访问第一个数组成员。这将在示例中为您提供C
:
sortLetters.filter(x=>/D/.test(x)).sort()[0]
Array#find
和isNaN获取第一个找到的NaN
。
const
sortBothType = ([...array]) => array.sort((a, b) => a.localeCompare(b));
getFirstLetter = array => array.find(isNaN);
let sortLetters = [ 'R', '1', 'U', '1', 'N', '1', 'D', '1', 'M', '1', 'C', '1'],
sortedType = sortBothType(sortLetters);
console.log(getFirstLetter(sortedType));
console.log(sortedType);
由于您只需要字母,因此您可以使用Array.reduce()
来获取"最小"的字母。您可以通过使用 isNaN()
并获取返回 true
的项目来忽略数字。
const sortLetters = ['R', '1', 'U', '1', 'N', '1', 'D', '1', 'M', '1', 'C', '1' ]
const result = sortLetters.reduce((r, char) =>
!isNaN(r) || (isNaN(char) && char < r) ? char : r
)
console.log(result)
您可以使用 compareFunction 中的 OR 运算符将排序后的字母和数字分别分组:
let array = [ 'R', '1', 'U', '1', '2', 'N', '1', 'D', '1', 'M', '1', 'C', '1' ]
let customSort = [...array].sort((a, b) => isNaN(b) - isNaN(a) || a.localeCompare(b))
console.log(customSort)
console.log(customSort[0])
-
我们可以通过将数组中的字母转换为
NaN
来过滤掉数字。附加算术运算符(如+
(会将非数字转换为NaN
-
然后使用
Number.isNaN()
过滤它们并对过滤后的字母数组进行排序,其中第一个元素将C
。
let sortLetters = [ 'R', '1', 'U', '1', 'N', '1', 'D', '1', 'M', '1', 'C', '1' ]
const sortBothType =(arr)=> {
return arr.filter(a => isNaN(+a)).sort((a,b) => a.localeCompare(b));
}
let [firstLetter, ...rest] = sortBothType(sortLetters);
console.log(firstLetter)
您正在比较parseInt()
的结果'string'
,请改用isNaN((。
此外,如果您先过滤掉数字,则不必复制数组,并且可以使用不带参数的 sort((。然后使用 shift(( 获取第一个字母:
const letters = [ 'R', '1', 'U', '1', 'N', '1', 'D', '1', 'M', '1', 'C', '1' ];
console.log(letters.filter(isNaN).sort().shift());
let sortLetters = ', '1', 'U', '1', 'N', '1', 'D', '1', 'M', '1', 'C', '1']
console.log(
sortLetters.map(item => isNaN(parseInt(item)) ? item : null).sort()[0]
);
解释
1 在 map fn 中,我们检查每个项目,是否是数字。 ParseInt 方法是合适的,当您想检查字符串值是否包含数字时。如果不是,则返回 isNaN - 字符串也是如此。
2 三元运算符 ?:在 map 函数中帮助我们使用我们在 1 中所做的检查结果创建新数组。
3 Map 方法返回的数组只有没有数字字符,因此我们可以使用排序方法按字母顺序排序。
4 [0] - 只需从排序的字母列表中返回第一项。