Список из многомерного массива
Помогите выполнить еще одну инструкцию. В функцию приходит строка её нужно отсортировать , и привести в верхний регистр что-бы получилось , то что в выходном коде. Но плюс ещё один момент - если в массиве встречаются одинаковые фамилии , нужно отсортировать массив по ИМЕНИ а не по фамилии (есть в массиве Madison:STAN и Megan:Stan нужно что-бы они были отобраны по имени а не по фамилии).Результат должен быть такой (ARNO, ANN)(BELL, JOHN)(CORNWELL, ALEX)(DORNY, ABBA)(KERN, LEWIS)(KORN, ALEX)(META, GRACE)(SCHWARZ, VICTORIA)(STAN, MADISON)(STAN, MEGAN)(WAHL, ALEXIS)
function meeting(s) {
let arr = s.split(';');
let newArr = [];
let newarrSorted = [];
for (let i = 0; i < arr.length; i++) {
newArr.push(arr[i].split(':').reverse());
}
newArr = newArr.sort();
for (let j = 0; j < newArr.length; j++) {
newarrSorted.push(`(${newArr[j].join(', ').toUpperCase()})`);
}
return newarrSorted.join('');
}
console.log(meeting("Alexis:Wahl;John:Bell;Victoria:Schwarz;Abba:Dorny;Grace:Meta;Ann:Arno;Madison:STAN;Alex:Cornwell;Lewis:Kern;Megan:Stan;Alex:Korn"));
Ответы (1 шт):
Нужно сперва всю строку сделать upperCase, потом сортировать:
let arr = s.split(';');
▼ заменить
let arr = s.toUpperCase().split(';');
Причина: В исходной строке встречаются Madison:STAN и Megan:Stan а при сортировке в таком виде, между ними встает Schwarz:
let arr = [['Schwarz', 'Victoria'], ['STAN', 'Madison'], ['Stan', 'Megan']].sort();
console.log(arr.join(' || ')); // STAN,Madison || Schwarz,Victoria || Stan,Megan
// * sort() без аргументов по умолчанию сортирует всё как строки.
// Если в массиве вместо строк - другие массивы (а у вас именно так),
// они сравниваются в виде строк 'STAN,Madison' < 'Stan,Megan'
console.log( 'STAN' < 'Schwarz' ) // true
console.log( 'Z'.charCodeAt(0) ) // 90
console.log( 'a'.charCodeAt(0) ) // 97
// В кодировке utf-8 все большие буквы идут раньше маленьких,
// поэтому при сравнении - большие буквы всегда 'меньше'.
console.log( 'Z' < 'a' ) // true
С необязательными изменениями:
function meeting(s) {
return (
s.toUpperCase() // <--
.split(';')
.map(e => '(' + e.split(':').reverse().join(', ') + ')' )
.sort()
.join('')
);
}
console.log(meeting("Alexis:Wahl;John:Bell;Victoria:Schwarz;Abba:Dorny;Grace:Meta;Ann:Arno;Madison:STAN;Alex:Cornwell;Lewis:Kern;Megan:Stan;Alex:Korn"));