我已经解决了对数组进行排序的麻烦,该数组应该按接下来的两个要求进行排序:
true
上要求的属性应该首先列出。- 然后按字母顺序
我已经这样做了,它有效,但我感觉有一个聪明的方法......:-|
const originalAttributes = [{
name: "P",
required: false
},
{
name: "D",
required: true
},
{
name: "W",
required: true
},
{
name: "A",
required: true
},
{
name: "N",
required: false
},
{
name: "S",
required: false
}
];
function listNames(originalAttributes) {
originalAttributes.forEach(item => {
console.log(`${item.name} ${item.required ? '--R' : ''}`);
})
}
listNames(originalAttributes)
console.log('------------------------------');
const sortedAttributes = originalAttributes.sort((a, b) => {
if (a.required && b.required) {
return a.name < b.name ? -1 : 1;
} else if (a.required) {
return -1
} else if (!b.required) {
return a.name < b.name ? -1 : 1;
}
});
listNames(sortedAttributes)
有什么建议吗?
最佳答案
您可以像下一个示例一样进行处理。
说明:一元加
用于将 bool 值转换为数字,如果这些 bool 值的差值是零
,然后使用 name
字段与 localeCompare() 进行比较.
const originalAttributes = [
{name: "P", required: false},
{name: "D", required: true},
{name: "W", required: true},
{name: "A", required: true},
{name: "N", required: false},
{name: "S", required: false},
{name: "SI", required: false}
];
let res = originalAttributes.sort((a, b) =>
(+b.required - +a.required) || a.name.localeCompare(b.name)
);
const listNames = a => a.map(
i => `${i.name} ${i.required ? '--R' : ''}`
).join("\n");
console.log(listNames(res));
关于javascript - 数组排序有两个要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54240562/