Javascript 如何使用lodash';s_sortBy()是否根据自定义要求按字母顺序对此列表进行排序?

Javascript 如何使用lodash';s_sortBy()是否根据自定义要求按字母顺序对此列表进行排序?,javascript,underscore.js,lodash,Javascript,Underscore.js,Lodash,我有以下对象数组: const myList = [ { id: 1, title: '[A] Animal Bite - F - Not Pregnant' }, { id: 2, title: '[P] Sinus Pain - M' }, { id: 3, title: '[A] Animal Bite - F - Pregnant' }, { id: 4, title: 'Check up male' }, { id: 5, title: '[A] Animal Bi

我有以下对象数组:

const myList = [
  { id: 1, title: '[A] Animal Bite - F - Not Pregnant' },
  { id: 2, title: '[P] Sinus Pain - M' },
  { id: 3, title: '[A] Animal Bite - F - Pregnant' },
  { id: 4, title: 'Check up male' },
  { id: 5, title: '[A] Animal Bite - M' },
  { id: 6, title: 'Duration' },
  { id: 7, title: '[P] Skin Injury - F - Not Pregnant' },
  { id: 8, title: '[P] Skin Injury - M' },
  { id: 9, title: 'Emergency Screening' }
]
完成后:

_.sortBy(myList, 'title');
我得到:

Check up male
Duration
Emergency Screening
[A] Animal Bite - F - Not Pregnant
[A] Animal Bite - F - Pregnant
[A] Animal Bite - M
[P] Sinus Pain - M
[P] Skin Injury - F - Not Pregnant
[P] Skin Injury - M
它看起来不错,只是我希望没有[A]或[p]的项目位于底部而不是顶部。因此,请改为这样:

[A] Animal Bite - F - Not Pregnant
[A] Animal Bite - F - Pregnant
[A] Animal Bite - M
[P] Sinus Pain - M
[P] Skin Injury - F - Not Pregnant
[P] Skin Injury - M
Check up male
Duration
Emergency Screening

如何实现这一点?

这是使用该功能的替代方法

假设字符串中最多有一个
[

const myList=[{id:1,标题:'[A]动物咬伤-F-未怀孕'},{id:2,标题:'[P]鼻窦疼痛-M'},{id:3,标题:'[A]动物咬伤-F-怀孕'},{id:4,标题:'检查男性'},{id:5,标题:'[A]动物咬伤-M'},{id:6,标题:'Duration id:7,标题:'[P]皮肤损伤-F-未怀孕',{id:8,标题:'[P]皮肤损伤-M'},{id:9,标题:'紧急筛查'}];
myList.sort((a,b)=>{
if(a.title.startsWith(“[”)&&b.title.startsWith(“[”)){
返回a.title.substring(1).localeCompare(b.title.substring(1));
} 
返回a.title.localeCompare(b.title);
});
console.log(myList);

.as控制台包装{max height:100%!important;top:0;}
这是使用函数的替代方法

假设字符串中最多有一个
[

const myList=[{id:1,标题:'[A]动物咬伤-F-未怀孕'},{id:2,标题:'[P]鼻窦疼痛-M'},{id:3,标题:'[A]动物咬伤-F-怀孕'},{id:4,标题:'检查男性'},{id:5,标题:'[A]动物咬伤-M'},{id:6,标题:'Duration id:7,标题:'[P]皮肤损伤-F-未怀孕',{id:8,标题:'[P]皮肤损伤-M'},{id:9,标题:'紧急筛查'}];
myList.sort((a,b)=>{
if(a.title.startsWith(“[”)&&b.title.startsWith(“[”)){
返回a.title.substring(1).localeCompare(b.title.substring(1));
} 
返回a.title.localeCompare(b.title);
});
console.log(myList);
.as控制台包装{max height:100%!important;top:0;}
与排序函数中的
数值:false
选项一起使用:

const list=[{id:1,标题:'[A]动物咬伤-F-未怀孕'},{id:2,标题:'[P]鼻窦疼痛-M'},{id:3,标题:'[A]动物咬伤-F-怀孕'},{id:4,标题:'检查男性'},{id:5,标题:'[A]动物咬伤-M'},{id:6,标题:'Duration id:7,标题:'[P]皮肤损伤-F-未怀孕'},{id:8,标题:'[P] 皮肤损伤-M'},{id:9,标题:'紧急筛查'}]
const r=list.sort((a,b)=>a.title.localeCompare(b.title,0,{numeric:false}))
console.log(r)
与排序函数中的
数值:false
选项一起使用:

const list=[{id:1,标题:'[A]动物咬伤-F-未怀孕'},{id:2,标题:'[P]鼻窦疼痛-M'},{id:3,标题:'[A]动物咬伤-F-怀孕'},{id:4,标题:'检查男性'},{id:5,标题:'[A]动物咬伤-M'},{id:6,标题:'Duration id:7,标题:'[P]皮肤损伤-F-未怀孕'},{id:8,标题:'[P] 皮肤损伤-M'},{id:9,标题:'紧急筛查'}]
const r=list.sort((a,b)=>a.title.localeCompare(b.title,0,{numeric:false}))
console.log(r)
lodash's可能会使用比较器列表。因此,您只需声明“单词不从方括号开始,请稍后使用”,并在“组”中按标题排序即可

_.sortBy(myList, [
    item => !item.title.startsWith("["), 
    'title'
]);
您甚至可以使用更具可读性(和灵活性)的方式指定顺序:

[UPD]通过@Ele提到的
startsWith
,它看起来更好了

lodash's可能会使用比较器列表。因此,您只需声明“单词不从方括号开始,请稍后使用”,并在“组”中按标题排序即可

_.sortBy(myList, [
    item => !item.title.startsWith("["), 
    'title'
]);
您甚至可以使用更具可读性(和灵活性)的方式指定顺序:


[UPD]使用@Ele提到的
startsWith
,它看起来更漂亮

如果你真的想使用lodash,你可以比较小写的标题:

_.sortBy(myList, item => item.title.toLowerCase());

这是因为小写字符(97-122)的代码单位大于
[
(91)中的一个。这也有不敏感地比较标题大小写的好处。

如果确实要使用lodash,可以比较小写标题:

_.sortBy(myList, item => item.title.toLowerCase());

这是因为小写字符(97-122)的代码单位大于
[
(91)的代码单位。这也有利于不敏感地比较标题大小写。

您可以通过检查字符串将括号部分移到顶部,然后获取本地比较结果

const
startswith方括号=s=>/^\[.+\]/.测试,
myList=[{id:1,标题:'[A]动物咬伤-F-未怀孕'},{id:2,标题:'[P]鼻窦疼痛-M'},{id:3,标题:'[A]动物咬伤-F-怀孕'},{id:4,标题:'Check up male'},{id:5,标题:'[A]动物咬伤-M'},{id:6,标题:'Duration id:7,标题:'[P]皮肤损伤-F-未怀孕'},{id:8,标题:[P]皮肤损伤-M'},{id:9,标题:'紧急筛查'}];
排序({title:a},{title:b})=>
带括号的开始(b)-带括号的开始(a)| | a.localeCompare(b));
console.log(myList);

。作为控制台包装{max height:100%!important;top:0;}
您可以通过检查字符串将括号部分移到顶部,然后获取本地比较结果

const
startswith方括号=s=>/^\[.+\]/.测试,
myList=[{id:1,标题:'[A]动物咬伤-F-未怀孕'},{id:2,标题:'[P]鼻窦疼痛-M'},{id:3,标题:'[A]动物咬伤-F-怀孕'},{id:4,标题:'Check up male'},{id:5,标题:'[A]动物咬伤-M'},{id:6,标题:'Duration id:7,标题:'[P]皮肤损伤-F-未怀孕'},{id:8,标题:[P]皮肤损伤-M'},{id:9,标题:'紧急筛查'}];
排序({title:a},{title:b})=>
带括号的开始(b)-带括号的开始(a)| | a.localeCompare(b));
console.log(myList);
。作为控制台包装{m