Я столкнулся с странным требованием, и я боюсь последние несколько часов, чтобы закончить его. Ниже мой массив строк (просто пример, фактический массив содержит около 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, а затем отсортировать его без везения.
Может кто-то помочь мне с этим и, пожалуйста, дайте мне знать, если я не понимаю.
Преобразуйте массив, используя Array#map
Array#map
, затем используйте Array#sort
в преобразованном массиве в соответствии с индексами [0]
(a[0] - b[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"
]
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)
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)
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)
return item.split('.')
Должен быть return item.split(',')
.
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]);
Просто сопоставьте разбитые и отформатированные значения и отсортируйте их по первому элементу.
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; }
Сначала преобразуйте каждую из строк в массив значений 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);