2016-07-28 12 views
0

配列の長さはXです。この例では8です。各位置は3つの値を持つCSVです。私はcsvの3番目の値でソートしようとしています。JavaScript配列CSV位置の解析と並べ替えおよび並べ替え

マイアレイのがに分類された後、新しい配列がどのように見えるべきか

array[0] = "1,17,28"; 
array[1] = "2,1,5"; 
array[2] = "3,37,48"; 
array[3] = "4,9,15"; 
array[4] = "5,4,14"; 
array[5] = "6,6,17"; 
array[6] = "7,99,110"; 
array[7] = "8,5,16"; 

:私は完全にこの1つの作業を取得しようとしている私の作業スペースを破壊した

newArray[0] = "2,1,5"; 
newArray[1] = "5,4,14"; 
newArray[2] = "4,9,15"; 
newArray[3] = "8,5,16"; 
newArray[4] = "6,6,17"; 
newArray[5] = "1,17,28"; 
newArray[6] = "3,37,48"; 
newArray[7] = "7,99,110"; 

アドバイスをいただければ幸いです!

答えて

2

あなたはこのためArray.sort()

var arr = [ 
    '1,17,28', 
    '2,1,5', 
    '3,37,48', 
    '4,9,15', 
    '5,4,14', 
    '6,6,17', 
    '7,99,110', 
    '8,5,16' 
]; 
arr.sort(function(a, b) { 
    var x = a.split(',')[2]; 
    var y = b.split(',')[2]; 
    return x - y; 
}); 
// Returns ["2,1,5", "5,4,14", "4,9,15", "8,5,16", "6,6,17", "1,17,28", "3,37,48", "7,99,110"] 

編集を行うことができます:あなたがそのままあなたの古い配列を維持したい場合は

だけ余分に。 (ES6構文)

[...arr].sort(function(a, b) { 
    var x = a.split(',')[2]; 
    var y = b.split(',')[2]; 
    return x - y; 
}); 
+0

また、古い配列を変更せずに新しい配列を作成したい場合は、 'var newArray = arr.slice(0).sort ...'を上記に追加するだけです。 –

+0

@Dawson私はそれをサポートするために私の答えを編集しました。しかし、ええ、彼はスライスでそれを行うこともできます。 – choz

+0

ありがとう!これは素晴らしい仕事でした! – user1857654

0

まず、各入力要素の3番目の数字からなる配列を事前に計算します。これを「3分の1の配列」としましょう。次に、入力配列と同じ長さのインデックス配列を表す配列を生成し、3番目の配列に従ってソートします。最後に、ソートされた索引シーケンスを入力配列にマップしてソートすることができます。

array = [ 
 
\t '1,17,28', 
 
\t '2,1,5', 
 
\t '3,37,48', 
 
\t '4,9,15', 
 
\t '5,4,14', 
 
\t '6,6,17', 
 
\t '7,99,110', 
 
\t '8,5,16' 
 
]; 
 

 
var e3 = array.map(e => Number(e.split(',')[2])); 
 
var newArray = Array.from(array.keys()).sort((a,b) => e3[a]-e3[b]).map(i => array[i]); 
 
console.log(newArray);

+0

関数呼び出しでは中カッコがありませんし、 'return'があります。過去には、事前計算がまったく役に立たないと思っています。それは、配列全体にもう1つの反復が導入され、メモリに追加の配列が格納されるためです。あなたの実装には、避けることができる複雑さとオーバーヘッドがたくさんあります。 –

+0

@Dawson私は繰り返される '.split( '、')[2]'呼び出しの冗長性を避けようとしていました。ソート操作。私は、必要なコードがより複雑で複雑なものになることが判明したことに同意しますが、このアプローチはパフォーマンスの節約につながります。 CSV文字列が多くのフィールドで非常に長く、入力配列が極端に長い場合を想像してみてください。私のソリューションは見た目ほど悪くないと思います。 – bgoldst