#javascript #arrays #string
#javascript #массивы #строка
Вопрос:
Я пытаюсь отсортировать массив строк на основе символа внутри каждой из этих строк. Пока у меня есть это
function doMath(s) {
let arr = s.split(' ');
let letterArr = [];
let sortedArr = [];
let n = 0;
for (var i = 0; i < arr.length; i ) {
n = arr[i].indexOf(arr[i].match(/[a-z]/i));
letterArr.push(arr[i][n]);
}
letterArr.sort();
console.log(letterArr);
for (i = 0; i < arr.length; i ) {
for (var j = 0; j <= arr[i].length; j ) {
if (arr[i].indexOf(letterArr[j]) > -1) {
sortedArr.unshift(arr[i]);
}
}
}
console.log(sortedArr);
}
doMath("24z6 1x23 y369 89a 900b");
Проблема проявляется, когда я регистрирую этот массив. Если я использую sortedArr.push(arr[i]);
,
то вывод:
["24z6", "1x23", "y369", "89a", "900b"]
Однако, когда я использую sortedArr.unshift(arr[i]);
, я получаю вывод:
["900b", "89a", "y369", "1x23", "24z6"]
Я не уверен, почему b
перед a
.
Я просто хочу, чтобы это было по алфавиту для сортировки. Я попробовал push()
, и это правильно, но в обратном направлении (z-a). Когда я пытаюсь unshift()
, все правильно, за исключением b
a
того, что переключаются и .
Комментарии:
1. Каково условие сортировки массива? Вы просто хотите изменить ввод в виде массива или существует определенный порядок?
2. Я просто хочу, чтобы это было по алфавиту для сортировки. я попробовал нажать, и это правильно, но в обратном направлении (z-a) когда я пытаюсь отменить сдвиг, это правильно, за исключением того, что b и a переключаются
3. Итак, вы хотите:
["89a", "900b", "1x23", "y369", "24z6"]
правильно? Я предполагаю, что вы не хотитеx
послеy
.4. Ваши циклы вывернуты наизнанку: сначала вы должны перебирать буквы (
j
), а затем находить соответствующий элемент массива (i
)5. @georg это имеет смысл! Спасибо
Ответ №1:
function doMath(s) {
return s.split(' ').sort(function (a,b) {
return a.match(/[a-z]/i)[0].localeCompare(b.match(/[a-z]/i)[0])})
}
console.log(doMath("24z6 1x23 y369 89a 900b"));
Комментарии:
1. Было бы неплохо предоставить некоторые пояснения к вашему коду. Кроме того, было бы лучше использовать ту же организацию, что и в операционной системе (т. Е.
doMath()
Функцию, Которая возвращает результаты). Другим улучшением было бы поместить все это во фрагмент с aconsole.log()
после него, чтобы люди могли запускать его на странице a, чтобы убедиться, что вы генерируете правильный вывод.2. Я должен признать, что не пробовал фрагменты кода.. Был участником всего пару дней,.. Я посмотрю, смогу ли я сделать это таким образом.
3. О,. Мне это нравится .. я тоже делал все эти отступы в 4 пробела . .:)
4. Фрагменты помогают с чем-то вроде этого (JavaScript / HTML / CSS). При таком вопросе / ответе, как этот, использование фрагмента приведет к большему количеству голосов (и, следовательно, к повышению репутации), поскольку люди тривиально проверяют ответ. Отступ в 4 пробела можно выполнять блоками, используя кнопку code между кнопками quote и picture на панели инструментов над рамкой редактирования.
5. @Keith Вау, это здорово. Намного проще, чем мой код. Спасибо. я многому могу научиться из этого