一个对象中多个数组如何根据某个属性对数组进行排序

一个对象中多个数组如何根据某个属性对数组进行排序

需求:一个list对象中有多个数组,每个数组中有多条数据,每条数据里有一个排序字段typeOrder,如何根据这一个字段让数组按顺序展示在页面上

对象格式示例:

list:{
    12:[
        {
            id:1,
            typeOrder: 5
        },
        {
            id:2,
            typeOrder: 5
        }
    ],
    34:[
        {
            id:3
            typeOrder: 2,
        },
        {
            id:4
            typeOrder: 2,
        },
        {
            id:5
            typeOrder: 2
        }
    ],
    56:[
        {
            id:6
            typeOrder: 1,
        },
        {
            id:7
            typeOrder: 1,
        },
        {
            id:8
            typeOrder: 1
        }
    ],
}

展示在页面上的顺序

56:[
        {
            id:6
            typeOrder: 1,
        },
        {
            id:7
            typeOrder: 1,
        },
        {
            id:8
            typeOrder: 1
        }
    ],
34:[
        {
            id:3
            typeOrder: 2,
        },
        {
            id:4
            typeOrder: 2,
        },
        {
            id:5
            typeOrder: 2
        }
    ],
12:[
        {
            id:1,
            typeOrder: 5
        },
        {
            id:2,
            typeOrder: 5
        }
    ],
    


有没有什么办法可以做到这个效果!


  let list = {
    100: [
    {
      id: 6,
      typeOrder: 3,
    },
    {
      id: 7,
      typeOrder: 3
    },
    {
      id: 8,
      typeOrder: 3
    }
  ],
  12: [

    {
      id: 1,
      typeOrder: 5
    },
    {
      id: 2,
      typeOrder: 5
    }
  ],
  34: [
    {
      id: 3,
      typeOrder: 2,
    },
    {
      id: 4,
      typeOrder: 2,
    },
    {
      id: 5,
      typeOrder: 2
    }
  ],
  56: [
    {
      id: 6,
      typeOrder: 1,
    },
    {
      id: 7,
      typeOrder: 1,
    },
    {
      id: 8,
      typeOrder: 1
    }
  ],
 
};
// 将list对象转换为Map对象,并按照typeOrder字段进行排序
const sortedList = new Map(Object.entries(list).sort((a, b) => a[1][0].typeOrder - b[1][0].typeOrder));
let newList = {};
// 遍历排序后的Map对象,将每个元素加入新的newList对象
sortedList.forEach((value, key) => {
  newList[key] = value;
});
console.log(newList);

【以下回答由 GPT 生成】

可以使用以下步骤来根据一个对象中多个数组的某个属性进行排序:

  1. 将对象中的数组提取出来,并将其存储在一个新的数组中。
  2. 使用Array.prototype.sort()方法进行排序,通过传递一个排序函数作为参数来根据属性typeOrder对数组进行排序。
  3. 循环新的排序后的数组,并使用原始对象中的键来获取每个数组,并将其按照排序的顺序重新放回到原始对象中。

以下是用JavaScript代码实现上述步骤的示例:

// 原始对象
var list = {
  12:[
    {
      id: 1,
      typeOrder: 5
    },
    {
      id: 2,
      typeOrder: 5
    }
  ],
  34:[
    {
      id: 3,
      typeOrder: 2
    },
    {
      id: 4,
      typeOrder: 2
    },
    {
      id: 5,
      typeOrder: 2
    }
  ],
  56:[
    {
      id: 6,
      typeOrder: 1
    },
    {
      id: 7,
      typeOrder: 1
    },
    {
      id: 8,
      typeOrder: 1
    }
  ],
};

// 提取数组并进行排序
var arrays = Object.values(list);
arrays.sort(function(a, b) {
  return a[0].typeOrder - b[0].typeOrder;
});

// 重新放回到原始对象中
var sortedList = {};
Object.keys(list).forEach(function(key, index) {
  sortedList[key] = arrays[index];
});

console.log(sortedList);

输出结果将会是:

{
  56:[
    {
      id: 6,
      typeOrder: 1
    },
    {
      id: 7,
      typeOrder: 1
    },
    {
      id: 8,
      typeOrder: 1
    }
  ],
  34:[
    {
      id: 3,
      typeOrder: 2
    },
    {
      id: 4,
      typeOrder: 2
    },
    {
      id: 5,
      typeOrder: 2
    }
  ],
  12:[
    {
      id: 1,
      typeOrder: 5
    },
    {
      id: 2,
      typeOrder: 5
    }
  ]
}

由此可见,数组已按照typeOrder属性的顺序进行了排序,并根据排序结果重新放回到原始对象中。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^