按表示节号的字符串排序的下划线
underscore sort by string that represent section number
[
{name:"foo", value:"1", order:"1.1.12"},
{name:"foo bar", value:"2", order:"2.10.1"},
{name:"bar", value:"3", order:"1.11.5"},
{name:"baz", value:"4", order:"2.6.2"},
{name:"foo baz", value:"5", order:"1.3.10"}
]
如何在下划线的帮助下按order
.js(或没有)对这个列表进行排序。所以我最终会得到这个:
[
{name:"a", value:"1", order:"1.1.12"},
{name:"a", value:"5", order:"1.3.10"},
{name:"a", value:"3", order:"1.11.5"},
{name:"a", value:"4", order:"2.6.2"},
{name:"a", value:"2", order:"2.10.1"}
]
值得一提的是,order
可以是任何长度的数字,例如它可以是:
1.1
2
3.1.2.3
因此,解决方案必须是通用的。
您可以将字符串拆分为数字数组,并比较同一位置的数字,直到找到不同的东西:
var arr = [
{name:"foo", value:"1", order:"1.1.12"},
{name:"foo bar", value:"2", order:"2.10.1"},
{name:"bar", value:"3", order:"1.11.5"},
{name:"baz", value:"4", order:"2.6.2"},
{name:"foo baz", value:"5", order:"1.3.10"},
{name:"foo baz", value:"5", order:"1.3"},
{name:"foo baz", value:"5", order:"2"}
];
arr.sort(function(item1, item2){
var split1 = item1.order.split('.');
var split2 = item2.order.split('.');
var length = Math.min(split1.length, split2.length);
for (var i=0; i<length; i++){
if (+split1[i] < +split2[i])
return -1;
if (+split1[i] > +split2[i])
return 1;
}
return split1.length - split2.length;
});
console.log(arr);
PS:纯JS解决方案,不使用下划线。
看看这个: 如何使用js比较软件版本号?(仅数字)
您当然必须将订单变量拆分为 "."
_.map([...],function(item) { item = item.split('.'); return item;});
此时,您有一个新问题,它只是按多个值排序。我想您可能会按每个订单数组的第 0 个值分组,然后按下一个值排序。
最终你可能会得到一个递归的解决方案......我会开始考虑在这里编辑一个。
相关文章:
- 下划线的 _.,但不排除以下数组中的子字符串
- 如何在 javascript 中为字符串中的数字添加下划线
- 删除下划线后的字符串
- 用javascript中的下划线替换字符串中的字母
- 获取每个'单词'在使用regex的Javascript字符串中的每个下划线之后
- 在字符串中插入下划线以代替单个或多个空格(连续)
- 将非字符串属性与下划线匹配.js在哪里
- 下划线.js if 语句上的字符串连接
- 如何修剪在 LoDash/下划线中开始多个字符串
- 按表示节号的字符串排序的下划线
- 下划线模板:“<字符串”不显示,但“<字符串”显示
- 如何使用下划线.js编辑具有字符串键值对的对象数组中的字符串
- 下划线位置:如何检查匹配的字符串是否不区分大小写
- 为字符串中的某些字符添加下划线
- 下划线.js :深度嵌套对象中的匹配字符串
- 将字符串中的特殊字符替换为_(下划线)
- 如何在JavaScript中将字符串中每个单词的第一个字母大写,并将所有空格更改为下划线
- 如何将下划线分隔的字符串转换为大写字符串
- 在JavaScript中将字符串转换为一系列基于长度的下划线
- 下划线 JS _.partial 减少维护备忘录引用并将整数转换为字符串