Я пытаюсь отфильтровать, а затем отсортировать массив чисел и строку, но мой код не работает

#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 из отсортированного списка букв.