对具有唯一值的对象键的数组进行排序
Sort array for object key that holds unique value
我有一个数组,如下所示:
var coll = [
{
prop1:true,
prop2:false,
id:"888399"
},
{
prop1:true,
prop2:true,
id:"/XS-555224"
},
{
prop1:false,
prop2:false,
id:"/DL-555444"
}
]
我想对数组进行排序,使ID以"/DL"开头的元素(总是只有一个)总是从顶部开始。我该怎么做?
我觉得自定义排序不是最好的选择,因为我不必相互比较元素,我只需要找到带有"/DL"的元素,将其切片,并将其插入数组的开头。
然而,要做到这一点,我仍然需要迭代数组的每个元素来找到元素,然后执行几个操作。所以我开始想,我还不如直接排序。问题是如何写出正确的条件来比较两个项目,并检查ID字符串的开头。因此,我认为我可以简单地测试String的开头,然后自己返回值,而不进行比较。
所以我试试这个:
coll.sort(function(a,b){
var itemA = a.id;
var itemB = b.id;
if(itemA.lastIndexOf("/DL") === 0){
return 1;
}
});
但这种比较不起作用。我的自定义比较函数有什么问题?谢谢你的任何有用的提示。
即使您只是在寻找一条移动到前面的记录,您仍然需要检查排序中的两个参数,它可以是任意一个。
coll.sort(function(a,b) {
return a.id.indexOf('/DL') === 0 ? -1 : b.id.indexOf('/DL') === 0 ? 1 : 0;
});
基本上,我们希望"/DL"记录是数组中的"最低"值,这样它就会首先显示(按从低到高的顺序排序)。如果a
较低,我们返回负值,如果b
较低,则返回正值。因此,当对a
是否为/DL进行排序时,我们需要返回一个负数。如果b
是/DL,则我们返回一个正。所以英语中的这个表达基本上是"a
是我们的记录吗?"-1。如果不是,b
是我们的记录吗?1.如果两者都没有,则0."
你可以试试这个:
var orderedArr = coll.sort(function(val){
return !val.id.toString().startsWith('/DL');
});
[编辑]
一旦你有了IE用户,你可以添加它,让你的生活在未来更轻松:
if (!String.prototype.startsWith) {
String.prototype.startsWith = function(searchString, position) {
position = position || 0;
return this.indexOf(searchString, position) === position;
};
}
这样你就可以随时使用startsWith了。
相关文章:
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- Javascript中的多维数组排序索引问题
- 如何按日期对Javascript对象数组排序
- 数组排序后显示更改
- 当许多元素相等时,Javascript数组排序无法正常工作
- Javascript数组排序速度受字符串长度的影响
- 按唯一键将对象数组排序为数组
- 以 js 为单位的数组排序
- js 数组排序无法正常工作
- 数组排序.论点从何而来
- 不需要的数组排序
- 数组排序不正确/不可预测,使用 indexOf 时
- Javascript将数组排序到树中
- 随后的多维数组排序会产生意外的结果
- 数组排序基于纯javascript搜索文本匹配
- Javascript自定义数组按数组排序
- 使用字符串按属性错误对对象进行数组排序
- 多维数组排序
- JavaScript与PHP在数组排序中的对比
- Javascript-关联数组排序