[英]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.sort
或array.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.