我有一个文件名数组,如下所示:
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.sort
或 array.map
以获得最终的嵌套数组。
顺便说一句,它是一长串文件名,我更喜欢在不改变原始数组的情况下最快最有效的方法。
最佳答案
你可以使用 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; }
关于javascript - 根据值将 javascript 数组排序为嵌套数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40423981/