我有一个字母和数字数组。
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)
答案 0 :(得分:3)
您可以使用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);
答案 1 :(得分:3)
首先过滤掉所有数字,然后进行排序,最后访问第一个数组成员。在示例中,这将为您提供C
:
sortLetters.filter(x=>/\D/.test(x)).sort()[0]
答案 2 :(得分:0)
由于只需要字母,因此可以使用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)
答案 3 :(得分:0)
您正在将parseInt()
与'string'
的结果进行比较,请改用isNaN()。
此外,如果您先filter取出数字,则不必复制数组,并且可以使用不带参数的sort()。然后使用shift()获取第一个字母:
const letters = [ 'R', '1', 'U', '1', 'N', '1', 'D', '1', 'M', '1', 'C', '1' ];
console.log(letters.filter(isNaN).sort().shift());
答案 4 :(得分:0)
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在地图fn中,我们检查每个项目是否为数字。当您要检查字符串值内部是否包含数字时,ParseInt方法是合适的。如果不是,则返回isNaN-字符串也是如此。
2三元运算符?:在map函数中帮助我们用检查结果创建新数组,该结果是在1中完成的。
3 Map方法返回的数组仅不包含数字字符,因此我们可以使用sort方法对字母进行排序。
4 [0]-仅从排序的字母列表中返回第一项。
答案 5 :(得分: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)
答案 6 :(得分:0)
您可以在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])