使用JavaScript

时间:2018-07-14 15:14:55

标签: javascript arrays sorting split array-map

我遇到了一个奇怪的要求,而我在最后几个小时内都在努力地完成它。下面是我的字符串数组(仅作为示例,实际数组包含大约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的array数组,因此输出为:

[
  [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,但是运气不好。

有人可以帮我这个忙吗?如果我不清楚的话,请告诉我。

4 个答案:

答案 0 :(得分:8)

Array#map中使用Array#map转换数组,然后根据[0]索引(a[0] - b[0])在转换后的数组上使用Array#sort

在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 :(得分:1)

首先使用import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { Routes, RouterModule } '@angular/router'; import { AppComponent } from './app.component'; import { NavbarComponent } from './navbar/navbar.component'; import { RedComponent } from './red/red.component'; import { BlueComponent } from './blue/blue.component'; @NgModule({ declarations: [ AppComponent, NavbarComponent, RedComponent BlueComponent ], imports: [ BrowserModule, RouterModule.forRoot() ], providers: [], bootstrap: [AppComponent] }) export class AppModule { } Array.map()将每个字符串转换为浮点值数组。 之后,您可以简单地使用parseFloat()

对数组数组进行排序

尝试以下方法:

Arrays.sort()

答案 2 :(得分:1)

只需将分割后的值和数字格式的值映射并按第一项进行排序即可。

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; }

答案 3 :(得分:1)

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