[英]sort an array of objects by 1 or more property values
我正在弄清楚是否有更好的方法來對下面的數組進行排序。
下面的代碼根據 label 和 deviceRegistered 對數組進行排序。 如果 label 是桌面電話並且 deviceRegistered 為真,那么它應該優先。
我的方法如下。
const terminals = [
{
"device":"JKJCF00",
"directory":"+1899990000",
"label":"Jabber",
"deviceRegistered":"false"
},
{
"device":"IOP8999",
"directory":"9099886644",
"label":"Desk Phone",
"deviceRegistered":"false"
},
{
"device":"KLJ7888",
"directory":"+8999999",
"label":"Jabber",
"deviceRegistered":"true"
},
{
"device":"VFD87987",
"directory":"+12386444",
"label":"Desk Phone",
"deviceRegistered":"true"
}]
let term = [...terminals],arr=[],sortedLines = [],lineObj ={};
term.forEach(line => arr.indexOf(line.label)===-1 ? arr.push(line.label):'');
arr.forEach(device => {
let filterArr = term.filter(line => line.label === device)
let sortArr = [...filterArr].sort((dev1,dev2) => dev1.deviceRegistered !== 'true' ? 1 : dev2.deviceRegistered !== 'true' ? -1 : 0)
lineObj[device] = sortArr
})
for (line in lineObj){ console.log(lineObj[line])
sortedLines.push(...lineObj[line])
}
}
output 是
[
{
"device":"KLJ7888",
"directory":"+8999999",
"label":"Jabber",
"deviceRegistered":"true"
},
{
"device":"JKJCF00",
"directory":"+1899990000",
"label":"Jabber",
"deviceRegistered":"false"
},
{
"device":"VFD87987",
"directory":"+12386444",
"label":"Desk Phone",
"deviceRegistered":"true"
},
{
"device":"IOP8999",
"directory":"9099886644",
"label":"Desk Phone",
"deviceRegistered":"false"
}
]
您可以檢查屬性並使用 boolean 值的增量。
const array = [ { device: "JKJCF00", directory: "+1899990000", label: "Jabber", deviceRegistered: "false" }, { device: "IOP8999", directory: "9099886644", label: "Desk Phone", deviceRegistered: "false" }, { device: "KLJ7888", directory: "+8999999", label: "Jabber", deviceRegistered: "true" }, { device: "VFD87987", directory: "+12386444", label: "Desk Phone", deviceRegistered: "true" } ]; array.sort((a, b) => (b.label === 'Desk Phone') - (a.label === 'Desk Phone') || (b.deviceRegistered === 'true') - (a.deviceRegistered === 'true') ); console.log(array);
.as-console-wrapper { max-height: 100%;important: top; 0; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.