Javascript - Как вернуть четыре наибольших числа в массиве? - PullRequest
2 голосов
/ 07 мая 2020

У меня есть массив строк, которые являются числами. Я пытаюсь вернуть 4 самых больших числа в моем массиве.

  const data = [
         "1,203,291",
         "2,301,291", 
         "643,092", 
         "1,391,290", 
         "32,309", 
         "3,391" 
                ]

Я пытаюсь вернуть 2,301,291, 1,391,290, 1,203,291, 643,092

Сначала я начинаю с удаления запятых в строке и преобразования ее в число.

let topArr = data.map(e => Number(e.replace(/(,\s*)+/g, '').trim()));

Затем создайте другую переменную, которая равна максимальному набору чисел.

 let topValues = Math.max(...topArr)
//bring back the commas that were removed to append values with commas
  String(topValues).replace(/(.)(?=(\d{3})+$)/g, '$1,')

Я использовал Math.Max, но это возвращает только самое большое число, которое равно 2,301,291 is есть ли способ изменить Math.Max, чтобы получить 4 лучших?

Вот мой код в полном виде:

const data = [
             "1,203,291",
             "2,301,291", 
             "643,092", 
             "1,391,290", 
             "32,309", 
             "3,391" 
                    ]
let topArr = data.map(e => Number(e.replace(/(,\s*)+/g, '').trim()));

   let topValues = Math.max(...topArr)
//bring back the commas that were removed to append values with commas
   String(topValues).replace(/(.)(?=(\d{3})+$)/g, '$1,')

Ответы [ 3 ]

2 голосов
/ 07 мая 2020

const data = [
         "1,203,291",
         "2,301,291", 
         "643,092", 
         "1,391,290", 
         "32,309", 
         "3,391" 
                ];
                
   let result = data.map(el => Number(el.split(",")
                              .join("")))
                              .sort((a,b) => b - a)
                              .splice(0, 4)
   
   console.log(result);
1 голос
/ 07 мая 2020

отсортируйте их в порядке убывания, затем используйте срез, чтобы получить первые 4, а затем снова используйте карту и внутренний обратный вызов, используйте код для добавления разделителя тысяч

const data = [
	"1,203,291",
	"2,301,291",
	"643,092",
	"1,391,290",
	"32,309",
	"3,391"
]


let topArr = data.map(e => Number(e.replace(/(,\s*)+/g, '').trim()))
    // order in descending order
	.sort((a, b) => {
		return b - a;
	})
    // get the first 4
	.slice(0, 4)
    // return a new array & inside callback to add comma separator 
	.map((item) => {
		return String(item).replace(/(.)(?=(\d{3})+$)/g, '$1,')

	});

console.log(topArr)
1 голос
/ 07 мая 2020

Почему бы не отсортировать их после преобразования в числа и не получить последние четыре числа?

...