Сортировка массива через запятую с использованием JavaScript

1

Я столкнулся с странным требованием, и я боюсь последние несколько часов, чтобы закончить его. Ниже мой массив строк (просто пример, фактический массив содержит около 2500 записей):

var testArray = [
  "130,839.9,855,837.3,848.65,3980489", 
  "129,875,875,828.1,833.25,6926078", 
  "138,891.3,893.3,865.2,868.75,5035618"
]

У нас есть 3 элемента, из которых каждый элемент разделен comma (каждый элемент имеет 6 элементов). то есть:

testArray[0] = "130,839.9,855,837.3,848.65,3980489"

Моя проблема в том, что я хотел сортировать testArray на основе первого элемента каждого элемента и преобразовать его в массив массива, имеющий все значение в float, поэтому выход будет выглядеть следующим образом:

[
  [129, 875, 875, 828.1, 833.25, 6926078],
  [130, 839.9, 855, 837.3, 848.65, 3980489],
  [138, 891.3, 893.3, 865.2, 868.75, 5035618]
]

Я могу сортировать отдельный элемент, но не весь массив в целом, и я попытался использовать split, а затем отсортировать его без везения.

Может кто-то помочь мне с этим и, пожалуйста, дайте мне знать, если я не понимаю.

  • 0
    Всегда лучше показывать попытки.
Теги:
arrays
sorting
split
array-map

4 ответа

8
Лучший ответ

Преобразуйте массив, используя Array#map Array#map, затем используйте Array#sort в преобразованном массиве в соответствии с индексами [0] (a[0] - b[0]):

В ES5

var testArray = [
  "130,839.9,855,837.3,848.65,3980489", 
  "129,875,875,828.1,833.25,6926078", 
  "138,891.3,893.3,865.2,868.75,5035618"
]

var converted = testArray.map(function (item) {
  return item.split(',').map(function (num) {
    return parseFloat(num);
  });
})
console.log(converted)

var sorted = converted.sort(function (a, b) { return a[0] - b[0] })
console.log(sorted)

В ES6

const testArray = [
  "130,839.9,855,837.3,848.65,3980489", 
  "129,875,875,828.1,833.25,6926078", 
  "138,891.3,893.3,865.2,868.75,5035618"
]

const converted = testArray.map(
  item => item.split(',').map(
    num => parseFloat(num)
  )
)
console.log(converted)

const sorted = converted.sort((a, b) => a[0] - b[0])
console.log(sorted)

В ES6 (с конденсированным)

const testArray = [
  "130,839.9,855,837.3,848.65,3980489", 
  "129,875,875,828.1,833.25,6926078", 
  "138,891.3,893.3,865.2,868.75,5035618"
]

const convertedAndSorted = testArray
  .map(n => n.split(',')
  .map(num => parseFloat(num)))
  .sort((a, b) => a[0] - b[0])

console.log(convertedAndSorted)
  • 1
    В коде ES5 есть опечатка: return item.split('.') Должен быть return item.split(',') .
  • 0
    Спасибо @JayDadhania, исправлено.
0
var testArray = ["130,839.9,855,837.3,848.65,3980489","129,875,875,828.1,833.25,6926078","138,891.3,893.3,865.2,868.75,5035618"];

const output = [];
for (let i = 0; i < testArray.length; i++) {
    var numbers = testArray[i].split(',');
    for (let j = 0; j < numbers.length; j++) {
        numbers[j] = +numbers[j];
    }
    output[i] = numbers;
}
output.sort(function(x, y) {
    return x[0] - y[0];
});

или короче

output = testArray.map(s => s.split(',')).map(e => e.map(n => +n)).sort((x, y) => x[0] - y[0]);
0

Просто сопоставьте разбитые и отформатированные значения и отсортируйте их по первому элементу.

var data = ["130,839.9,855,837.3,848.65,3980489", "129,875,875,828.1,833.25,6926078", "138,891.3,893.3,865.2,868.75,5035618"],
    result = data
        .map(s => s.split(',').map(Number))
        .sort((a, b) => a[0] - b[0]);
        
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0

Сначала преобразуйте каждую из строк в массив значений float, используя Array.map() и parseFloat(). После этого вы можете просто отсортировать массив массивов с помощью массива Arrays.sort()

Попробуйте следующее:

var arr = ["130,839.9,855,837.3,848.65,3980489","129,875,875,828.1,833.25,6926078","138,891.3,893.3,865.2,868.75,5035618"];

var result = arr.map((a)=> a.split(",").map((b)=>parseFloat(b))).sort((a,b)=> a[0] -b[0]);
console.log(result);
  • 0
    @ downvoters Причина?
  • 0
    Именно так!!! Причина ???
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню