簡體   English   中英

根據值將javascript數組排序為嵌套數組

[英]Sort a javascript array into nested arrays based on values

我有一個像這樣的文件名數組:

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並不重要,因為我使用babel)我想將它排序成嵌套數組,如下所示:

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

我知道為了找到相同的基本名稱,我必須運行正則表達式,我已經在使用filesArray[i].slice(0, -4).replace(/[^0-9\\.]/g, '') )

但我不知道如何運行array.sortarray.map來獲取最終的neste數組。

順便說一下,這是一長串的文件名,我希望以最快最有效的方式這樣做,而不會改變原始數組。

您可以使用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; } 

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM