#javascript #arrays #sorting
#javascript #массивы #сортировка
Вопрос:
У меня есть массив букв и цифр.
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)
Комментарии:
1. ну, это все строки, поэтому ваша проверка номера должна измениться. Простая инструкция отладки показывает вашу проблему.
console.log(parseInt('R'), parseInt('R') === 'string')
Ответ №1:
Сначала отфильтруйте все цифры, затем отсортируйте, наконец, получите доступ к первому элементу массива. Это даст вам ваш C
пример:
sortLetters.filter(x=>/D/.test(x)).sort()[0]
Ответ №2:
Вы могли бы взять первое найденное, NaN
используя Array#find
и isNaN.
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);
Ответ №3:
Поскольку вам нужна только буква, вы можете использовать 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) amp;amp; char < r) ? char : r
)
console.log(result)
Ответ №4:
Вы могли бы использовать оператор OR в функции compareFunction для группировки отсортированных алфавитов и чисел отдельно:
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])
Ответ №5:
-
Мы можем отфильтровать из чисел, преобразовав алфавиты в массиве в
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:
Вы сравниваете результат 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());
Ответ №7:
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 возвращает массив только с не числовыми символами, поэтому мы можем использовать метод sort для сортировки по алфавиту.
4 [0] — просто верните firstitem из отсортированного списка букв.