2016-11-04 8 views
1

に基づいてネストされた配列にjavascript配列:ソート値

var filesArray = [ 
    "120.png", 
    "120s.png", 
    "120t.jpg", 
    "169.png", 
    "169r.jpg", 
    "169s.jpg", 
    "169t.jpg", 
    "170.png", 
    "170r.jpg", 
    "170s.jpg", 
    "170t.jpg", 
] 

JavaScriptを使用して(ES5または6または7私はバベルを使用しておりますので問題ありません)私は希望そのようなネストされた配列にそれをソートする:

[ 
    [ 
     "120.png", 
     "120s.png", 
     "120t.jpg" 
    ], 
    [ 
     "170.png", 
     "170r.jpg", 
     "170s.jpg", 
     "170t.jpg" 
    ] 
] 

私は、同じベース名を見つけるために、私は正規表現を実行する必要があり、私はすでに私がしかし知らない何filesArray[i].slice(0, -4).replace(/[^0-9\.]/g, ''))

を使用していますことを知っていますは最終的なネスト配列を得るにはarray.sortまたはarray.mapを実行する方法。

ちなみに、それは長いファイル名のリストです。元の配列に変更を加えることなく、最も効率的な方法を選ぶことをお勧めします。

答えて

2

アイテムをグループ化するためにMapを使用できます。

var filesArray = ["120.png", "120s.png", "120t.jpg", "169.png", "169r.jpg", "169s.jpg", "169t.jpg", "170.png", "170r.jpg", "170s.jpg", "170t.jpg"], 
 
    grouped = []; 
 

 
filesArray.forEach(function (a) { 
 
    var key = a.slice(0, -4).replace(/[^0-9\.]/g, ''), 
 
     array = this.get(key); 
 

 
    if (!array) { 
 
     array = []; 
 
     this.set(key, array); 
 
     grouped.push(array); 
 
    } 
 
    array.push(a); 
 
}, new Map); 
 

 
console.log(grouped);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

あなたは私のバージョンが好きですか?私のanwerであなたのCSSを使用することはできますか?:) –

+0

はい、あなたはcssを使うことができます。答えには結果のための追加のループが必要です。 –

1

var filesArray = ["120.png", "120s.png", "120t.jpg", "169.png", "169r.jpg", "169s.jpg", "169t.jpg", "170.png", "170r.jpg", "170s.jpg", "170t.jpg"]; 
 
var result = []; 
 
var obj = filesArray.reduce(function(prev, curr, index, array) { 
 
    var rawName = curr.match(/[0-9]/g); 
 
    if (rawName.length) { 
 
    var name = rawName.join(''); 
 
    if (prev[name]) { 
 
     prev[name].push(curr); 
 
    } else { 
 
     prev[name] = [curr]; 
 
    } 
 
    } 
 
    return prev 
 
}, {}); 
 

 
Object.keys(obj).forEach(function(key) { 
 
    result.push(obj[key]); 
 
}); 
 
console.log(result);
.as-console-wrapper { 
 
    max-height: 100% !important; 
 
    top: 0; 
 
} 
 
.as-console-row, 
 
.as-console-row-code { 
 
    background-color: #fff!important; 
 
}