按每个 JavaScript 中存储的数组中的元素数对对象键进行排序
Sort object keys by the number of elements in the array stored in each in JavaScript
我有一个项目,我收到一份产品清单,然后按制造商分组。我想以编程方式在页面上显示这些,但需要按产品从多到少的顺序显示。我需要想出一种算法来将对象键从最多产品排序到最少产品。
这是我所拥有的以及我需要到达的地方的简化示例:
let devices = {
Sony: [
{name: 'Experia 1', productCode: 's1'},
{name: 'Experia 2', productCode: 's2'}
],
Apple: [
{name: 'iPhone 8', productCode: 'a1'},
{name: 'iPhone 9', productCode: 'a2'},
{name: 'iPhone 10', productCode: 'a3'},
{name: 'iPhone 11', productCode: 'a4'}
],
Huawei : [
{name: 'S 21', productCode: 'h1'}
],
LG: [
{name: 'V60', productCode: 'l1'},
{name: 'V60 Ultra', productCode: 'l2'},
{name: 'G7', productCode: 'l3'}
]
}
我需要对数据进行排序,因此首先是制造商最多,然后下降到制造商最少。所以需要修改成这样:
{
Apple: [
{name: 'iPhone 8', productCode: 'a1'},
{name: 'iPhone 9', productCode: 'a2'},
{name: 'iPhone 10', productCode: 'a3'},
{name: 'iPhone 11', productCode: 'a4'}
],
LG: [
{name: 'V60', productCode: 'l1'},
{name: 'V60 Ultra', productCode: 'l2'},
{name: 'G7', productCode: 'l3'}
]
Sony: [
{name: 'Experia 1', productCode: 's1'},
{name: 'Experia 2', productCode: 's2'}
],
Huawei : [
{name: 'S 21', productCode: 'h1'}
],
}
提供的设备经常不同,所以我需要在用户每次访问页面时对这些数据进行排序。因此,我正在寻找最短的语法来实现这一点。
我正在寻找有关 how to sort object keys alphabetically 和其他类似相关算法的教程,但没有完全做到这一点的教程。我已经开始尝试自定义一些基本的排序算法,但数据操作不是我的强项,所以它们要么失败要么变成臃肿的意大利面条代码混乱。
是否有一种简短易行的方法来转换所描述的数据?也许有一种排序方法或设计模式特别适合这项任务。我一直在研究 lodash 命令,但没有找到任何可以立即跳出的解决方案。
如果有人能提供任何建议,我将不胜感激。提前谢谢你
您可以将其转换为数组,按长度排序,然后将其转换回对象。
let devices = {
Sony: [
{name: 'Experia 1', productCode: 's1'},
{name: 'Experia 2', productCode: 's2'}
],
Apple: [
{name: 'iPhone 8', productCode: 'a1'},
{name: 'iPhone 9', productCode: 'a2'},
{name: 'iPhone 10', productCode: 'a3'},
{name: 'iPhone 11', productCode: 'a4'}
],
Huawei : [
{name: 'S 21', productCode: 'h1'}
],
LG: [
{name: 'V60', productCode: 'l1'},
{name: 'V60 Ultra', productCode: 'l2'},
{name: 'G7', productCode: 'l3'}
]
}
devices = Object.fromEntries(Object.entries(devices).sort( (a,b) => b[1].length - a[1].length));
console.log(devices)
如果你在对象上循环,我不会将它转换回一个对象,我只会使用 Object.entries
并基于它输出我的数据。
我有一个项目,我收到一份产品清单,然后按制造商分组。我想以编程方式在页面上显示这些,但需要按产品从多到少的顺序显示。我需要想出一种算法来将对象键从最多产品排序到最少产品。
这是我所拥有的以及我需要到达的地方的简化示例:
let devices = {
Sony: [
{name: 'Experia 1', productCode: 's1'},
{name: 'Experia 2', productCode: 's2'}
],
Apple: [
{name: 'iPhone 8', productCode: 'a1'},
{name: 'iPhone 9', productCode: 'a2'},
{name: 'iPhone 10', productCode: 'a3'},
{name: 'iPhone 11', productCode: 'a4'}
],
Huawei : [
{name: 'S 21', productCode: 'h1'}
],
LG: [
{name: 'V60', productCode: 'l1'},
{name: 'V60 Ultra', productCode: 'l2'},
{name: 'G7', productCode: 'l3'}
]
}
我需要对数据进行排序,因此首先是制造商最多,然后下降到制造商最少。所以需要修改成这样:
{
Apple: [
{name: 'iPhone 8', productCode: 'a1'},
{name: 'iPhone 9', productCode: 'a2'},
{name: 'iPhone 10', productCode: 'a3'},
{name: 'iPhone 11', productCode: 'a4'}
],
LG: [
{name: 'V60', productCode: 'l1'},
{name: 'V60 Ultra', productCode: 'l2'},
{name: 'G7', productCode: 'l3'}
]
Sony: [
{name: 'Experia 1', productCode: 's1'},
{name: 'Experia 2', productCode: 's2'}
],
Huawei : [
{name: 'S 21', productCode: 'h1'}
],
}
提供的设备经常不同,所以我需要在用户每次访问页面时对这些数据进行排序。因此,我正在寻找最短的语法来实现这一点。
我正在寻找有关 how to sort object keys alphabetically 和其他类似相关算法的教程,但没有完全做到这一点的教程。我已经开始尝试自定义一些基本的排序算法,但数据操作不是我的强项,所以它们要么失败要么变成臃肿的意大利面条代码混乱。
是否有一种简短易行的方法来转换所描述的数据?也许有一种排序方法或设计模式特别适合这项任务。我一直在研究 lodash 命令,但没有找到任何可以立即跳出的解决方案。
如果有人能提供任何建议,我将不胜感激。提前谢谢你
您可以将其转换为数组,按长度排序,然后将其转换回对象。
let devices = {
Sony: [
{name: 'Experia 1', productCode: 's1'},
{name: 'Experia 2', productCode: 's2'}
],
Apple: [
{name: 'iPhone 8', productCode: 'a1'},
{name: 'iPhone 9', productCode: 'a2'},
{name: 'iPhone 10', productCode: 'a3'},
{name: 'iPhone 11', productCode: 'a4'}
],
Huawei : [
{name: 'S 21', productCode: 'h1'}
],
LG: [
{name: 'V60', productCode: 'l1'},
{name: 'V60 Ultra', productCode: 'l2'},
{name: 'G7', productCode: 'l3'}
]
}
devices = Object.fromEntries(Object.entries(devices).sort( (a,b) => b[1].length - a[1].length));
console.log(devices)
如果你在对象上循环,我不会将它转换回一个对象,我只会使用 Object.entries
并基于它输出我的数据。