#javascript #arrays #sorting
Вопрос:
Например, у меня есть массив строк ['item 2','item 1','item 10','item 4']
. Я хочу ['item 1','item 2','item 4','item 10']
, чтобы это было так, но по умолчанию sort()
функция сортирует значения в алфавитном порядке, что означает, что это будет выглядеть так ['item 1','item 10','item 2','item 4']
Комментарии:
1. С этим конкретным вводом (и его вариантами, постоянной строкой, за которой следует число),
array.sort((a, b) => a.localeCompare(b, 'EN', {numeric: true}));
все получится.
Ответ №1:
Просто набери номер и отсортируй его
let array = ["item 1", "item 10", "item 2", "item 4"];
const result = array.sort((a, b) => a.match(/d /) - b.match(/d /));
console.log(result);
Ответ №2:
Вы можете добавить пользовательскую функцию сравнения в массив.сортировка
const myArr = ['item 2','item 1','item 10','item 4'];
const sortArr = myArr.sort((a, b) => {
const num1 = Number(a.split(' ')[1]);
const num2 = Number(b.split(' ')[1]);
return num1 - num2;
});
console.log(sortArr);
или просто
const myArr = ['item 2','item 1','item 10','item 4'];
const sortArr = myArr.sort((a, b) => Number(a.split(' ')[1]) - Number(b.split(' ')[1]))
console.log(sortArr);
Ответ №3:
Вы можете передать функцию в sort()
метод и отсортировать ее по своему усмотрению
let result = arr.sort((a,b) => a.split(' ')[1]-b.split(' ')[1])
console.log(result);
Ответ №4:
let array = ['item 1','item 10','item 2','item 4'];
var customSort = function (a, b) {
return Number(a.replace("item ","")) - Number(b.replace("item ",""));
}
console.log(array.sort(customSort));
//one line
console.log(array.sort((a,b) => Number(a.replace("item ","")) - Number(b.replace("item ",""))));
Ответ №5:
Сделайте пользовательский sort() function
и используйте slice
, чтобы получить номер строки, а затем примените Number()
его для преобразования в число для сравнения.
Примечание: sort()
обновит исходный массив.
const array = ["item 1", "item 10", "item 2", "item 4"];
array.sort((a, b) => Number(a.slice(5)) - Number(b.slice(5)));
console.log(array);
Ответ №6:
Вы можете выбрать любой ответ. Это более общее решение для сортировки строк, заканчивающихся числовыми значениями (или нет).
const toNumberOrZero = str => {
const maybeNumber = str.match(/(d )$/);
return maybeNumber amp;amp; maybeNumber[0] || 0;
};
const sortNumericForStringsEndingWithNumbers = (a, b) =>
toNumberOrZero(a) - toNumberOrZero(b);
console.log(
['item 2', 'item 1', 'item 10', 'item 4', 'item222',
'anything1023', 'notanumber', 'the meaning of life is 42']
.sort(sortNumericForStringsEndingWithNumbers)
);