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



我遇到了一个问题,我得到了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。我知道没有一种方法可以对对象进行排序,我试着用条目和键映射它们,但我不知道如何深入结构并针对它们。

您可以使用Array#sortDestructuring 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);

这对你有用吗?

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;
}, {});}

最新更新