繁体   English   中英

按 Javascript 中的数组中的多个对象排序

[英]Sort by multiple objects in a array in Javascript

var customersObj= [ 
    { recordId: "123", groupID: "1992" ,memberID:"10" Name : "John"     },
    { recordId: "141",  groupID: "1994" ,memberID:"13", Name : "Arrow"  },
    { recordId: "111", groupID: "1991",memberID:"12", Name : "Mike" }
];

我需要先按recordId排序,然后按groupID ,然后按memberID来返回数组...

我试过了,但没有得到预期的结果”

return _.sortBy(customersObj,'recordID','groupID','memberID');

有人可以在这方面提供帮助吗...

请注意,您的*IDstring ,因此,我使用Array.map将它们转换为整数,然后_.sortBy可以正常工作。

我添加了额外的值来检查子排序。

 const customersObj = [{ recordId: "123", groupID: "1992", memberID: "10", Name: "John" }, { recordId: "141", groupID: "1994", memberID: "13", Name: "Arrow" }, { recordId: "111", groupID: "1991", memberID: "12", Name: "Mike" }, { recordId: "123", groupID: "1991", memberID: "12", Name: "Sean" }, { recordId: "123", groupID: "1991", memberID: "11", Name: "Sara" }]; const result = customersObj.map(item => ({ recordId: parseInt(item.recordId, 10), groupID: parseInt(item.groupID, 10), memberID: parseInt(item.memberID, 10), Name: item.Name })); console.log(_.sortBy(result, 'recordId', 'groupID', 'memberID'))
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>

尝试使用这种方法:

const customersObj= [
  { recordId: "123", groupID: "1992" ,memberID:"10", Name : "John"     },
  { recordId: "141",  groupID: "1994" ,memberID:"13", Name : "Arrow"  },
  { recordId: "111", groupID: "1991",memberID:"12", Name : "Mike" }
];

const sorted = customersObj.sort((a,b)=>{
  return a.recordId - b.recordId || a.groupID - b.groupID || a.memberID - b.memberID;
})    

console.log(`sorted`, sorted);

您可以使用 lambda function 的排序方法进行排序。

const list = [
{      color: 'white', size: 'XXL' },
    { color: 'red', size: 'XL' },
   { color: 'black', size: 'M' }
]
list.sort((a, b) => (a.color > b.color) ? 1 : -1) // you can add different conditions here.

对多个字段进行排序,这样做

customersObj.sort(function(a, b) {
    return a["recordId"] - b["recordId"] || a["groupID"] - b["groupID"] || a["memberID"] - b["memberID"];
});

您可以通过以下方法使用多个值array of object排序

 var arrayOfObj = [ { recordId: "123", groupID: "1992",memberID:"10", Name: "John" }, { recordId: "141", groupID: "1994",memberID:"13", Name: "Arrow" }, { recordId: "111", groupID: "1991",memberID:"12", Name: "Mike" } ]; let sortBy = [{ prop:'recordId', direction: 1 },{ prop:'lastName', direction: 1 },{ prop:'memberID', direction: 1 }]; arrayOfObj.sort(function(a,b){ let i = 0, result = 0; while(i < sortBy.length && result === 0) { result = sortBy[i].direction*(a[ sortBy[i].prop ].toString() < b[ sortBy[i].prop ].toString()? -1: (a[ sortBy[i].prop ].toString() > b[ sortBy[i].prop ].toString()? 1: 0)); i++; } return result; }) console.log(arrayOfObj, ":::::");

使用 lodash,可以获取一组键并正确拼写所需键。

 var customersObj = [{ recordId: "123", groupID: "1992", memberID: "10", Name: "John" }, { recordId: "141", groupID: "1994", memberID: "13", Name: "Arrow" }, { recordId: "111", groupID: "1991", memberID: "12", Name: "Mike" }]; console.log(_.sortBy(customersObj, ['recordId', 'groupID', 'memberID'])); // ^ ^ ^
 .as-console-wrapper { max-height: 100%;important: top; 0; }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

嗨我试过解决你的问题:)

 const display = document.querySelector(".display"); var customersObj= [ { recordId: "123", groupID: "1992",memberID:"10", Name: "John" }, { recordId: "141", groupID: "1994",memberID:"13", Name: "Arrow" }, { recordId: "111", groupID: "1991",memberID:"12", Name: "Mike" } ]; customersObj.sort(function (a, b) { return a.recordId - b.recordId || b.groupID - a.groupID || c.memberID - c.memberID; }); customersObj.map(obj => { const item = document.createElement("div"); item.textContent += obj.recordId + " " + obj.groupID + " " + obj.memberID +" "+ obj.Name; display.appendChild(item); });
 <div class="display"> </div>

暂无
暂无

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

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