对充满由对象组成的数组的对象进行排序

Sort an object which is filled with arrays consisting of objects

我遇到了一个问题,我得到了 Api 结果,为了方便我无法修改这些结果,我必须处理我得到的结果。 我得到一个充满数组的对象,其中也有类似于这个的对象:

{
sectionOne: [{game: 1, order: 3},{game: 2},{game: 3},{game: 4}],                                                       
sectionTwo: [{game: 1, order: 1},{game: 2},{game: 3},{game: 4}],
sectionThree: [{game: 1, order: 2},{game: 2},{game: 3},{game: 4}],
}

在所有部分中,数组中的第一个元素始终有一个名为 order 的键,这是数组需要在对象中的位置。 从上面的例子来看,预期的结果应该是:

{
sectionThree: [{game: 1, order 1},{game: 2},{game: 3},{game: 4}],                                                        
sectionOne: [{game: 1, order 2},{game: 2},{game: 3},{game: 4}],
sectionTwo: [{game: 1, order 3},{game: 2},{game: 3},{game: 4}],
}

PS。我知道没有可以对对象进行排序的方法,我尝试使用条目和键映射它们,但我不知道如何深入结构并定位它们。

这对你有用吗?

arr = arr.sort((a, b) => a[0].order - b[0].order)

如果我没理解错的话,你需要这样的功能:

const sortKeys = (obj) => {
return Object.keys(obj).sort().reduce((acc, key) => {
    acc[key] = obj[key];
    return acc;
}, {});}

您可以使用 Array#sort and Destructuring Assignment:

const obj = {
  sectionOne: [{ game: 1, order: 3 }, { game: 2 }, { game: 3 }, { game: 4 }],
  sectionTwo: [{ game: 1, order: 1 }, { game: 2 }, { game: 3 }, { game: 4 }],
  sectionThree: [{ game: 1, order: 2 }, { game: 2 }, { game: 3 }, { game: 4 }],
};

let sortedObj = Object.fromEntries(
  Object.entries(obj).sort(
    ([, [{ order: o1 }]], [, [{ order: o2 }]]) => o1 - o2
  )
);

console.log(sortedObj);