javascript - 如何使用 Lodash 在数字数组中按位置排序

标签 javascript lodash

我有一个必须排序的字符串数组:

['1.2.3', '1.5.2', '1.23', '1.20.31']

是否可以对数组进行排序,以便在将字符串按 1.2.3 之类的点拆分为 ['1','2', '3'] 我们与另一个数组逐个位置比较(如 Python 元组比较)?

预期结果

['1.2.3', '1.5.2' '1.20.31', '1.23']

我知道可以使用原生 JavaScript .sort 和比较函数获取 2 个对象,但我不能使用 JS 排序,因为我不能修改原始数组。是否可以使用 Lodash 的 _.sortBy 希望您提供关键功能?

最佳答案

使用 Vanilla.js 的解决方案:

var data = ['1.2.3', '1.5.2', '1.23', '1.20.31'];

function customSort(d) {
    return d.map(function (a) {
        return a.split('.').map(Number);
    }).sort(function (a, b) {
        var l = 0, m = Math.min(a.length, b.length);
        while (l < m && a[l] === b[l]) {
            l++;
        }
        return l === m ? a.length - b.length : a[l] - b[l];
    }).map(function (a) {
        return a.join('.');
    });
}

document.write('<pre>sorted array ' + JSON.stringify(customSort(data), 0, 4) + '</pre>');
document.write('<pre>original array ' + JSON.stringify(data, 0, 4) + '</pre>');

关于javascript - 如何使用 Lodash 在数字数组中按位置排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31972076/

相关文章:

javascript - 为什么脚本可以一行一行地运行,但不能作为一个整体运行?

javascript - 在数组中查找重复数组

javascript - 如何检测 HTML5 data-* 属性是否具有空字符串作为值?

javascript - 如何将多个 JS promise 链接到组合的 bool 结果

javascript - 拆分图像的 href 标签

arrays - 使用 lodash 从对象数组创建唯一数组时出现类型错误

javascript - 使用 lodash 将数组映射到对象

node.js - 带有生成器和 promise 的 nodejs 函数式编程

javascript - 使用 Vue.js 如何刷新使用 lodash 去抖动的方法?

javascript - 如何重置 Cypress 中不可清除的字段?