如何对对象内嵌套数组中的多个对象按order字段排序?
如何对对象中每个子项的group数组按order字段排序?
你遇到的问题很明确——你知道单个数组怎么按order排序,但现在要处理的是包含多个子项的对象,每个子项都有自己的group数组,需要逐个处理它们的排序逻辑,而不是只操作其中一个。
解决方案1:原地修改原对象
因为数组的sort()方法是原地排序(直接修改原数组),我们只需要遍历data对象里的每一个子项,对它们的group数组分别执行排序即可:
// 遍历data的所有子项 for (const prop in data) { // 确保是对象自身的属性(避免遍历原型链上的属性) if (data.hasOwnProperty(prop)) { // 对当前子项的group按order升序排序 data[prop].group.sort((a, b) => a.order - b.order); } }
执行这段代码后,你的data对象就会变成你期望的样子:每个group数组都按order从小到大排列。这里不需要额外加|| a.order.localeCompare(b.order),因为order是数字类型,直接用减法就能实现正确的升序排序。
解决方案2:创建新对象(不修改原数据)
如果你不想改动原有的data对象,可以通过复制属性和数组的方式生成一个新的排序后的对象:
const sortedData = Object.fromEntries( Object.entries(data).map(([key, item]) => { return [ key, { // 复制item的所有原有属性 ...item, // 复制group数组并排序(避免修改原数组) group: [...item.group].sort((a, b) => a.order - b.order) } ]; }) );
这个方法利用Object.entries()把对象转成键值对数组,再通过map()处理每个子项:复制子项的属性,同时复制并排序group数组,最后用Object.fromEntries()转回对象,原data会保持不变。
为什么你之前的代码不行?
你之前只对单个子项的group执行了排序,但你的data里有item和item2两个独立的子项,每个都有自己的group数组,所以必须遍历所有子项,逐个处理它们的排序逻辑才行。
内容的提问来源于stack exchange,提问作者Zkk
相关产品推荐
相关产品推荐

