๐Ÿšง

javascript sort() ์— async ํ•จ์ˆ˜ ์“ฐ๊ธฐ

purpplee 2021. 6. 12. 00:18

์›๋ž˜ ๋ฐ์ดํ„ฐ์—๋Š” ์—†๊ณ , ์„œ๋ฒ„์—์„œ ๋น„๋™๊ธฐ ์š”์ฒญ์œผ๋กœ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•ด์„œ ์›๋ž˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•˜๊ณ  ์‹ถ์–ด ์•„๋ž˜์ฒ˜๋Ÿผ ์ ์—ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ๋‹ค.

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;
};
๋ฐ˜์‘ํ˜•