Как отсортировать массив строк по порядку чисел?

#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)
);