繁体   English   中英

Lodash - 将对象移动到数组中的第一位而不是按另一个属性排序

[英]Lodash - Move object to first place in array than sort by another property

我有一组对象员工

在此处输入图片说明

    {
  "emp1": {
    "BusinessPartnerFormattedName": "Aleksandra Lewandowski",
    "EmpRoleCode": "BUP003",
    "EmpRoleType": "Employee",
    "EmployeeID": "E8000",
    "isAssigned" : true,
    "ObjectID": "00163E0E46241ED7A0EA0590D0655967"
  },
  "emp2": {
    "BusinessPartnerFormattedName": "Aleksandra Lewandowski",
    "EmpRoleCode": "BUP003",
    "EmpRoleType": "Employee",
    "EmployeeID": "E8000",
    "isAssigned" : true,
    "ObjectID": "00163E0E46241ED7A0EA0590D0655967"
  },
  "emp3": {
    "BusinessPartnerFormattedName": "Aleksandra Lewandowski",
    "EmpRoleCode": "BUP003",
    "EmpRoleType": "Employee",
    "EmployeeID": "E8000",
    "isAssigned" : false,
    "ObjectID": "00163E0E46241ED7A0EA0590D0655967"
  },
  "emp4": {
    "BusinessPartnerFormattedName": " Lewandowski",
    "EmpRoleCode": "BUP803",
    "EmpRoleType": "Employee",
    "EmployeeID": "BUP803",
    "isAssigned" : false,
    "ObjectID": "00163E0E46241ED7A0EA0590D0655967"
  },
  "emp5": {
    "BusinessPartnerFormattedName": "Aleksandra",
    "EmpRoleCode": "BUP043",
    "EmpRoleType": "Employee",
    "EmployeeID": "BUP043",
    "isAssigned" : false,
    "ObjectID": "00163E0E46241ED7A0EA0590D0655967"
  },
  "emp6": {
    "BusinessPartnerFormattedName": "Eva Log",
    "EmpRoleCode": "BUP0d03",
    "EmpRoleType": "Employee",
    "EmployeeID": "BUP0d03",
    "isAssigned" : false,
    "ObjectID": "00163E0E46241ED7A0EA0590D0655967"
  }
}

我想将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应该放在第一位时,如果ab的 EmployeeID 值不同,请检查其中一个是否具有E8000值。如果以太确实具有该值,则将其放在第一位。

否则,检查ab是否具有相同的isAssigned值,如果它们不相同,则首先将具有true的值作为isAssigned值。

最后,如果不满足先验条件,请按照您想要的任何逻辑进行设置。

当然,您必须填写您想要的任何排序逻辑。 例如,如果您想按字母顺序对BusinessPartnerFormattedName进行排序,您可以使用以下内容填充Remaining sort logic...块:

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

您链接所需的排序顺序。

 var array = [ { 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.sort((a, b) => (b.EmployeeID === 'E8000') - (a.EmployeeID === 'E8000') || b.isAssigned - a.isAssigned ); console.log(array);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

用 lodash

 var array = [ { 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 } ]; console.log(_.sortBy(array, [ o => o.EmployeeID !== 'E8000', o => !o.isAssigned ]));
 .as-console-wrapper { max-height: 100% !important; top: 0; }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>

您提供的数据具有很强的误导性,但是我仍然想发布我的解决方案,因为基本上我只是喜欢它。

 const items = [{BusinessPartnerFormattedName:"Aleksandra Lewandowski",EmpRoleCode:"BUP003",EmpRoleType:"Employee",EmployeeID:"E7000",isAssigned:!0,ObjectID:"00163E0E46241ED7A0EA0590D0655967"},{BusinessPartnerFormattedName:"Aleksandra Lewandowski",EmpRoleCode:"BUP003",EmpRoleType:"Employee",EmployeeID:"E6000",isAssigned:!1,ObjectID:"00163E0E46241ED7A0EA0590D0655967"},{BusinessPartnerFormattedName:"Aleksandra Lewandowski",EmpRoleCode:"BUP003",EmpRoleType:"Employee",EmployeeID:"E8000",isAssigned:!1,ObjectID:"00163E0E46241ED7A0EA0590D0655967"}]; const helper = (emp) => emp.EmployeeID === 'E8000' ? 2 : +(!!emp.isAssigned); const r = items.sort((a, b) => helper(b) - helper(a)); console.log(r);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM