JavaScript: могу ли я сортировать строку в массиве (невозможно нормальное использование сортировки)

Я хочу отсортировать строку внутри массива, а не обычную сортировку, потому что если я это сделаю, результат будет:

var a = ["dcb","acb","gfe"];
console.info(a.sort());

ответ будет:

["acb","dcb","gfe"]

чего я не хочу, отсортированный массив, который я хочу, - это сортировка строки внутри массива, например:

var a = ["dcb","acb","gfe"];

ожидаемый ответ:

["bcd","abc","efg"]

надеюсь мой вопрос вам понятен :)

a.map(s => s.split('').sort().join(''))
Jared Smith 21.06.2019 20:38

Возможный дубликат Сортировать все символы в строке

Jared Smith 21.06.2019 20:39

@JaredSmith, почему ты ответил комментарием, а не ответом?

John 21.06.2019 20:46

альтернативный, более лаконичный синтаксис: a.map(s=>[...s].sort().join(''))

Randy Casburn 21.06.2019 20:49

Метод .map() выполняет итерацию по каждому элементу массива, а код обратного вызова карты сортирует этот отдельный элемент. Это сработает.

Randy Casburn 21.06.2019 20:51

@RandyCasburn хорошо.

Jared Smith 21.06.2019 20:51

@Джон, потому что это обман, и я проголосовал за закрытие.

Jared Smith 21.06.2019 20:53
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
7
86
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Используйте Array.map() и сортируйте каждую строку отдельно:

const arr = ["dcb","acb","gfe"];

const result = arr.map(str => str
  .split('')
  .sort()
  .join('')
)

console.info(result);

альтернативный, более лаконичный синтаксис: a.map(s=>[...s].sort().join(''))

Randy Casburn 21.06.2019 20:50

Вам все равно нужно присоединиться к отсортированному массиву.

Ori Drori 21.06.2019 20:51

@RandyCasburn .split(''), по общему признанию, имеет большую симметрию с .join(''), что упрощает понимание реализации, даже если для ввода требуется немного больше символов ... Я не думаю, что «краткость» обязательно является наиболее важным качеством здесь при сравнении этих двух подходов. .

Patrick Roberts 21.06.2019 21:57

@PatrickRoberts - предлагается только в качестве альтернативы. Я полностью ценю и понимаю ваш комментарий. Я проголосовал за этот ответ :-)

Randy Casburn 21.06.2019 22:03

Чтобы выполнить операцию над каждым элементом массива (в данном случае отсортировать строку), используйте цикл. Функция Array.prototype.map является подходящей «функцией цикла», когда вы хотите сопоставить массив длины n с массивом той же длины (т. е. когда вы хотите преобразовать каждый элемент массива).

let a = ["dcb", "acb", "gfe"];
let sorted = a.map(a => [...a].sort().join(''));
console.info(sorted);

альтернативный, более лаконичный синтаксис: a.map(s=>[...s].sort().join(''))

Randy Casburn 21.06.2019 20:50
  1. Метод .map() перебирает каждый элемент массива.

  2. Используйте функцию стрела ES6 и оператор Назначение деструктурирования для упрощения кода, если вы хотите использовать ES5, используйте обычную функцию и метод .split('').

  3. Метод .sort() для сортировки отдельных символов после их разделения.

  4. Метод .join('') для их обратного соединения.

Пример (ES6):

let a = ["dcb","acb","gfe"];
let sorted = a.map( s => [...s].sort().join('') );
consloe.log(sorted);

Пример (ES5):

let a = ["dcb","acb","gfe"];

let sorted = a.map( 
  function(s) { 
    return s.split('').sort().join(''); 
  });

consloe.log(sorted);

Другие вопросы по теме