Сортировать массив, который содержит число и строки - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь отсортировать массив, который содержит строки, числа и числа в виде строк (например, '1', '2').Я хочу отсортировать этот массив так, чтобы отсортированный массив сначала содержал числа, а затем строки, содержащие число, а затем строки.

var arr = [9,5,'2','ab','3',-1 ] // to be sorted
arr.sort()
// arr = [-1, 5, 9, "2", "3","ab"] // expected result
//arr = [-1, "2", 5, 9, "ab"] // actual result

Я также пробовал

var number =[];
var char =[];
arr.forEach(a=>{
 if(typeof a == 'number') number.push(a);
 else char.push(a);
})
arr = (number.sort((a,b)=> a>b)).concat(char.sort((a,b)=> a>b))
// arr = [-1, 5, 9, "2", "3","ab"] // expected result
//  arr = [-1, 5, 9, "2", "ab", "3"]// actual result

Ответы [ 11 ]

0 голосов
/ 28 декабря 2018

Вот, пожалуйста!

const arr = [9,5,'2','ab','3',-1 ]

const numbers = arr.filter(i => typeof i === 'number');
const numerics = arr.filter(i => typeof i === 'string' && !isNaN(i));
const strings = arr.filter(i => typeof i === 'string' && isNaN(i));

numbers.sort();
numerics.sort();
strings.sort()

const result = [].concat(numbers, numerics, strings)

console.log(result)

Моя стратегия состояла в том, чтобы сначала найти все три блока (числа, цифры и строки), а затем просто объединить их.

...