์๋ ๋ฐ์ดํฐ์๋ ์๊ณ , ์๋ฒ์์ ๋น๋๊ธฐ ์์ฒญ์ผ๋ก ๋ฐ์์จ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํด์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌํ๊ณ ์ถ์ด ์๋์ฒ๋ผ ์ ์๋ค.
๊ทธ๋ฐ๋ฐ ์ค๋ฅ๊ฐ ๋ฌ๋ค.
const sortArray = (array, name) => {
return array.sort(
async (a, b) => {
const x = await a.searchDetailById(a.id);
const y = await b.searchDetailById(b.id);
return x - y;
}
);
};
์ด๋ฐ ์์ผ๋ก sort ์ปค์คํ ํจ์๋ฅผ async ๋ก ์ฌ์ฉํ๊ณ ์ถ์ ๋..
sort ์ปค์คํ ํจ์๋ async ๋ฅผ ์ธ ์ ์๋ค. ๋น์ฐํ๋ค... ์ ๋ฌ๋ฉด promise ๋ฅผ ๋ฐํํ๋ ๋ง์ด๋ค.
sort ์ async ๋ฅผ ์ฐ๊ณ ์ถ๋ค๋ฉด ์๋์ฒ๋ผ promise.all ๋ก ๋จผ์ ๋ฐ์์จ ํ, ์๋ ๋ฐ์ดํฐ์ ์๋ ์์ฑ์ธ ๊ฒ์ฒ๋ผ ๊ฐ๊ณตํ ํ ์ ๋ ฌํด์ฃผ๋ฉด ๋๋ค.
(์ด๋ ์คํ์ค๋ฒํ๋ก์ฐ๋ฅผ ์ฐธ๊ณ ํ์๋ค..)
๋ก์ง์ ์์ธํ ์ค๋ช ํ์๋ฉด,
์ผ๋จ async-await ์ผ๋ก ๊ฐ์ ธ์ฌ ๋น๊ต ํญ๋ชฉ (์์ ์ฝ๋์์๋ a.searchDetailById(id).good) ์ ์๋ ๋ฐ์ดํฐ array ์ ํฉ์น๋ค.
๊ทธ๋ฌ๋ฉด [0] ๋ฒ์งธ ์์๋ async-await ์ผ๋ก ๊ฐ์ ธ์จ ํญ๋ชฉ์ผ ๊ฒ์ด๊ณ , [1]๋ฒ์งธ ์์๋ ์๋ array ์ด๋ค.
ํฉ์น ์๋ก์ด object ๋ฅผ sort ํ ํ, [1] ๋ฒ์งธ ์์๋ง ๋ค์ ๋ฐ๋ก ๋นผ๋ค๋ฉด sorted array ๋ฅผ ๋ง๋ค ์ ์๋ค.
const sortArray = async (array) => {
const originArray = array;
//๋จผ์ ๋น๊ต ํญ๋ชฉ์ ๋น๋๊ธฐ๋ก ๋ฐ์์ ์๋ array ์ ์๋ ์์ฑ์ธ ๊ฒ์ฒ๋ผ ํฉ์น๋ค.
const comparableArray = await Promise.all(
originArray.map(async (x) => [
await searchDetailById({ id: x.id }),
x,
])
);
//[0] ๋ฒ์งธ ์์๊ฐ ๋น๊ต ์์ฑ์ด๋ฏ๋ก ์ด๋ฅผ ์์ฉํ์ฌ ๋น๊ตํ๋ค.
comparableArray.sort((a, b) => {
return +b[0].good - +a[0].good;
});
//์ ๋ ฌ๋ coparableArray ์ [1] ๋ฒ์งธ ์์๋ ์๋ ๋ฐ์ดํฐ์ด๋ [1] ๋ฒ์งธ ์์๋ง ๋นผ๋ธ๋ค
const sortedArray = comparableArray.map((x) => {
return x[1];
});
return sortedArray;
};