javascript - 根据值将 javascript 数组排序为嵌套数组

标签 javascript arrays sorting mapping

我有一个文件名数组,如下所示:

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 以获得最终的嵌套数组。

顺便说一句,它是一长串文件名,我更喜欢在不改变原始数组的情况下最快最有效的方法。

最佳答案

你可以使用 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/

相关文章:

javascript - Ruby 生成的 JSON 与 JavaScript 的 JSON 解析器不兼容

javascript - 在javascript中更改数组对象的部分属性

javascript - 使用特定格式对字符串进行排序

list - 稳定的排序,即最小干扰性排序

javascript - 尝试在 mouseenter 和 mouse left 上隐藏和显示 div

javascript - 如果我想为数组的单个索引添加多个元素,如何在 javascript 中填充数组

javascript - 检测页面底部以获取更多 react 数据

java - Arrays.asList().contains() 给出错误的结果

内部函数可以使用父函数中定义的变量吗?

jquery - 为 jQuery dataTables 实现自定义 sSortType 和排序函数