[英]sort an array of objects by 1 or more property values
I am figuring out if there is a better way to sort the below array.我正在弄清楚是否有更好的方法来对下面的数组进行排序。
The below code sorts the array based on the label and deviceRegistered.下面的代码根据 label 和 deviceRegistered 对数组进行排序。 if label is Desk phone and deviceRegistered is true then it should take the precedence.如果 label 是桌面电话并且 deviceRegistered 为真,那么它应该优先。
My approach is like below.我的方法如下。
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])
}
}
The output is 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"
}
]
You could check the properties and use the delta of the boolean values.您可以检查属性并使用 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; }
Assumption: I'm the author of this library, but I created sort-es exactly to simplify the array sorting.假设:我是这个库的作者,但我创建了 sort-es 正是为了简化数组排序。
If you're interested: docs GH如果您有兴趣:文档GH
import { byValues, byString, byValue, byBoolean } from "sort-es"
const terminals = [] //...items
const sorted = terminals.sort(byValues([
["label", byString()],
["deviceRegistered", byValue(d => d === 'true', byBoolean())]
]))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.