[英]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');
有人可以在这方面提供帮助吗...
请注意,您的*ID
是string ,因此,我使用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.