Javascript Lodash-将对象移动到数组中的第一位,而不是按其他属性排序

Javascript Lodash-将对象移动到数组中的第一位,而不是按其他属性排序,javascript,sorting,lodash,Javascript,Sorting,Lodash,我有一组对象雇员 我希望将EmployeeID等于E8000的员工放在列表的第一位,而不是将isAssigned等于true的员工放在后面 到目前为止,我已经做到了这一点: var sortedItems = _.sortBy(items, function(item) { return (item.isAssigned === true || item.EmployeeID === "E8000") ? 0 : 1; }); 但如何确保EmployeeID等于E8000的emp始终处于首

我有一组对象雇员

我希望将EmployeeID等于E8000的员工放在列表的第一位,而不是将isAssigned等于true的员工放在后面

到目前为止,我已经做到了这一点:

var sortedItems = _.sortBy(items, function(item) {
  return (item.isAssigned === true || item.EmployeeID === "E8000") ? 0 : 1;
});

但如何确保EmployeeID等于E8000的emp始终处于首位

不确定您为什么需要lodash:

items.sort((a,b)=>{
    if(a.EmployeeID !== b.EmployeeID){
        if(a.EmployeeID === 'E8000') return -1;
        if(b.EmployeeID === 'E8000') return 1;
    };

    if(a.isAssigned !== b.isAssigned){
        return a.isAssigned ? -1 : 1;
    }

    //Remaining sort logic...
})
这意味着:

在决定a或b是否应排在第一位时,如果a和b的EmployeeID值不相同,请检查其中一个是否具有值E8000。如果乙醚一号确实有这个值,请将该值放在第一位

否则,请检查a和b是否具有与isAssigned相同的值,如果没有,请首先将具有true的值作为isAssigned值

最后,如果先前的条件没有满足,那么按照您想要的逻辑设置哪个应该先进行

当然,你必须在这之后填写任何你想要的逻辑。例如,如果您想按BusinessPartnerFormattedName的字母顺序排序,您需要填写剩余的排序逻辑。。。使用以下命令阻止:

if(a.BusinessPartnerFormattedName < b.BusinessPartnerFormattedName) return -1;
if(a.BusinessPartnerFormattedName > b.BusinessPartnerFormattedName) return 1;
return 0;

不确定您为什么需要lodash:

items.sort((a,b)=>{
    if(a.EmployeeID !== b.EmployeeID){
        if(a.EmployeeID === 'E8000') return -1;
        if(b.EmployeeID === 'E8000') return 1;
    };

    if(a.isAssigned !== b.isAssigned){
        return a.isAssigned ? -1 : 1;
    }

    //Remaining sort logic...
})
这意味着:

在决定a或b是否应排在第一位时,如果a和b的EmployeeID值不相同,请检查其中一个是否具有值E8000。如果乙醚一号确实有这个值,请将该值放在第一位

否则,请检查a和b是否具有与isAssigned相同的值,如果没有,请首先将具有true的值作为isAssigned值

最后,如果先前的条件没有满足,那么按照您想要的逻辑设置哪个应该先进行

当然,你必须在这之后填写任何你想要的逻辑。例如,如果您想按BusinessPartnerFormattedName的字母顺序排序,您需要填写剩余的排序逻辑。。。使用以下命令阻止:

if(a.BusinessPartnerFormattedName < b.BusinessPartnerFormattedName) return -1;
if(a.BusinessPartnerFormattedName > b.BusinessPartnerFormattedName) return 1;
return 0;

您可以将所需的排序顺序链接起来

变量数组=[ {name:E8000 true,EmployeeID:E8000,isAssigned:true}, {name:E8000 true,EmployeeID:E8000,isAssigned:true}, {name:E8003 false,EmployeeID:E8003,isAssigned:false}, {name:E8001 true,EmployeeID:E8001,isAssigned:true}, {name:E8002 true,EmployeeID:E8002,isAssigned:true}, {name:E8001 false,EmployeeID:E8001,isAssigned:false} ]; array.sorta,b=> b、 EmployeeID==='E8000'-a.EmployeeID=='E8000'|| b、 isAssigned-a.isAssigned ; console.logarray;
.作为控制台包装器{max height:100%!important;top:0;}可以链接所需的排序顺序

变量数组=[ {name:E8000 true,EmployeeID:E8000,isAssigned:true}, {name:E8000 true,EmployeeID:E8000,isAssigned:true}, {name:E8003 false,EmployeeID:E8003,isAssigned:false}, {name:E8001 true,EmployeeID:E8001,isAssigned:true}, {name:E8002 true,EmployeeID:E8002,isAssigned:true}, {name:E8001 false,EmployeeID:E8001,isAssigned:false} ]; array.sorta,b=> b、 EmployeeID==='E8000'-a.EmployeeID=='E8000'|| b、 isAssigned-a.isAssigned ; console.logarray;
.as console wrapper{max height:100%!important;top:0;}您提供的数据具有很强的误导性,但是我仍然希望发布我的解决方案,因为基本上我喜欢它

const items=[{BusinessPartnerFormattedName:Aleksandra Lewandowski,EmpRoleCode:BUP003,EmpRoleType:EmployeeID:E7000,isAssigned:!0,ObjectID:00163E0E462ED7A0EA0590D0655967},{BusinessPartnerFormattedName:Aleksandra Lewandowski,EmpRoleCode:BUP003,empoleType:EmployeeID:E6000,isAssigned:!1,ObjectID:00163E0E462ED7A0EA0590D0655967},{BusinessPartnerFormattedName:Aleksandra Lewandowski,企业代码:BUP003,企业类型:Employee,员工ID:E8000,分配:!1,ObjectID:00163E0E46241ED7A0EA0590D0655967}]; const helper=emp=>emp.EmployeeID=='E8000'?2:+!!emp.isAssigned; const r=items.sorta,b=>helperb-helpera;
console.logr;您提供的数据具有高度误导性,但是我仍然希望发布我的解决方案,因为基本上我就是喜欢它

const items=[{BusinessPartnerFormattedName:Aleksandra Lewandowski,EmpRoleCode:BUP003,EmpRoleType:EmployeeID:E7000,isAssigned:!0,ObjectID:00163E0E462ED7A0EA0590D0655967},{BusinessPartnerFormattedName:Aleksandra Lewandowski,EmpRoleCode:BUP003,empoleType:EmployeeID:E6000,isAssigned:!1,ObjectID:00163E0E462ED7A0EA0590D0655967},{BusinessPartnerFormattedName:Aleksandra Lewandowski,企业代码:BUP003,企业类型:Employee,员工ID:E8000,分配:!1,ObjectID:00163E0E46241ED7A0EA0590D0655967}]; const helper=emp=>emp.EmployeeID=='E8000'?2:+!!emp.isAssigned; const r=items.sorta,b=>helperb-helpera;
console.logr;您是否有三个以上的项目?如果有更多项目,会发生什么?顺便说一句,您正在尝试对一个对象进行排序,因为数组只有一个项目…@NinaScholz是的,我有99个项目

项目,但我的代码是一个简单的示例,但正如Nina所说,您无法对对象进行排序。你是说一组物体吗?如果没有这些emp1、emp2等键?@kinduser是的对象数组,我已经做了一些更正,很抱歉造成混淆。你有三个以上的项目吗?如果更多,会发生什么?顺便说一句,你正在尝试对一个对象排序,因为数组只有一个项目…@NinaScholz是的,我有99个项目,但我的代码是一个简单的例子,但正如Nina所说,你不能对一个对象排序。你是说一组物体吗?如果没有这些emp1、emp2等键?@kinduser是的对象数组,我已经做了一些更正,我很抱歉造成混淆,因为我只是喜欢洛达斯,个人选择,但感谢你的普通方法这没有任何意义。。。OP有一个对象数组,其中有一个嵌套对象。。。你的解决方案解决不了问题it@kinduser-你说得对!抱歉,我以为顶级对象是数组。napi15,如果顶级对象不是数组,这将不起作用。@DRich似乎适合OP问题:我只是喜欢lodash,个人选择,但感谢你的普通方法。这没有任何意义。。。OP有一个对象数组,其中有一个嵌套对象。。。你的解决方案解决不了问题it@kinduser-你说得对!抱歉,我以为顶级对象是数组。napi15,如果您的顶级对象不是数组,这将不起作用。@DRich似乎适合OP问题:正是我想要的danke schon:正是我想要的danke schon:谢谢您的回答,不过我想改进我的问题,你介意告诉我什么是误导性的,这样我就可以编辑它了吗?@napi15所以基本上你已经发布了一个对象数组,但是在这些对象里面是一个嵌套的对象,带有键emp1、emp2等等,这些键的值就是employee对象。所以它就像一个嵌套结构,但是所有已发布的答案都与没有这些emp1、emp2键的对象平面数组相关,只是一个employee对象数组。好的,是的,我注意到所有提供的答案都与我的嵌套结构不符,但是我修改了提供的逻辑,再次感谢你的回答谢谢你的回答,但是我想改进我的问题,你介意告诉我什么是误导性的,这样我就可以编辑它吗?@napi15所以基本上你已经发布了一个对象数组,但是在这些对象中有一个嵌套对象,带有键emp1、emp2等等,这些键的值是employee对象。所以它就像一个嵌套结构,但是所有已发布的答案都与没有这些emp1、emp2键的对象平面数组相关,只是一个员工对象数组。好的,我注意到所有提供的答案都与我的嵌套结构不符,但我调整了提供的逻辑,再次感谢您的回答